Browse Source

feat: 预警首页样式、地图弹窗

lxf 2 months ago
parent
commit
e8a9d0bac9
56 changed files with 5843 additions and 4 deletions
  1. 62 0
      public/farmData/farmItem.json
  2. 2794 0
      public/farmData/workList.json
  3. 1 1
      public/index.html
  4. BIN
      src/assets/images/warningHome/alarm-active-arrow.png
  5. BIN
      src/assets/images/warningHome/alarm-active.png
  6. BIN
      src/assets/images/warningHome/alarm-bg.png
  7. BIN
      src/assets/images/warningHome/alarm-bg2.png
  8. BIN
      src/assets/images/warningHome/box-bg.png
  9. BIN
      src/assets/images/warningHome/box-top.png
  10. BIN
      src/assets/images/warningHome/camera-icon.png
  11. BIN
      src/assets/images/warningHome/close-btn.png
  12. BIN
      src/assets/images/warningHome/expert-icon.png
  13. BIN
      src/assets/images/warningHome/gallery/camera-icon.png
  14. BIN
      src/assets/images/warningHome/gallery/camera.png
  15. BIN
      src/assets/images/warningHome/gallery/icon-0.png
  16. BIN
      src/assets/images/warningHome/gallery/icon-1.png
  17. BIN
      src/assets/images/warningHome/gallery/icon-10.png
  18. BIN
      src/assets/images/warningHome/gallery/icon-11.png
  19. BIN
      src/assets/images/warningHome/gallery/icon-12.png
  20. BIN
      src/assets/images/warningHome/gallery/icon-13.png
  21. BIN
      src/assets/images/warningHome/gallery/icon-2.png
  22. BIN
      src/assets/images/warningHome/gallery/icon-3.png
  23. BIN
      src/assets/images/warningHome/gallery/icon-4-no.png
  24. BIN
      src/assets/images/warningHome/gallery/icon-4.png
  25. BIN
      src/assets/images/warningHome/gallery/icon-5.png
  26. BIN
      src/assets/images/warningHome/gallery/icon-6.png
  27. BIN
      src/assets/images/warningHome/gallery/icon-7.png
  28. BIN
      src/assets/images/warningHome/gallery/icon-8.png
  29. BIN
      src/assets/images/warningHome/gallery/icon-9.png
  30. BIN
      src/assets/images/warningHome/gallery/log-bg.png
  31. BIN
      src/assets/images/warningHome/log-bg.png
  32. BIN
      src/assets/images/warningHome/lz.png
  33. BIN
      src/assets/images/warningHome/search-img.png
  34. BIN
      src/assets/images/warningHome/t.png
  35. BIN
      src/assets/images/warningHome/watermark/feiniao.png
  36. BIN
      src/assets/images/warningHome/watermark/fushe.png
  37. BIN
      src/assets/images/warningHome/watermark/shidu.png
  38. BIN
      src/assets/images/warningHome/watermark/temp.png
  39. 6 0
      src/router/mainRoutes.js
  40. 3 2
      src/views/Login.vue
  41. 2 1
      src/views/components/Header.vue
  42. 123 0
      src/views/warningHome/components/alarmList.vue
  43. 909 0
      src/views/warningHome/components/album.vue
  44. 49 0
      src/views/warningHome/components/album_compoents/albumCarousel.vue
  45. 91 0
      src/views/warningHome/components/album_compoents/albumCarousel7d.vue
  46. 190 0
      src/views/warningHome/components/album_compoents/albumCarouselItem.vue
  47. 278 0
      src/views/warningHome/components/album_compoents/albumDrawBox.vue
  48. 64 0
      src/views/warningHome/components/album_compoents/cacheImg.js
  49. 261 0
      src/views/warningHome/components/album_compoents/detailDailog.vue
  50. 83 0
      src/views/warningHome/components/chart.vue
  51. 253 0
      src/views/warningHome/components/chartSeting.js
  52. 121 0
      src/views/warningHome/components/indicatorChart.vue
  53. 247 0
      src/views/warningHome/index.vue
  54. 153 0
      src/views/warningHome/util.js
  55. 67 0
      src/views/warningHome/warningLayer.js
  56. 86 0
      src/views/warningHome/warningMap.js

+ 62 - 0
public/farmData/farmItem.json

@@ -0,0 +1,62 @@
+{
+    "88379": {
+        "address": "广州市从化区",
+        "curPeriodId": 2,
+        "curPeriodName": "",
+        "curPhenologyId": 2,
+        "curPhenologyName": "控梢期",
+        "district": "\"广州市从化区\"",
+        "flyStyle": null,
+        "fruitsTypeId": "1",
+        "fruitsTypeItemId": "4",
+        "fruitsTypeItemName": "",
+        "fruitsTypeName": "",
+        "fzr": "模拟农场306",
+        "icon": "",
+        "location": null,
+        "mianji": "1",
+        "mock": 1,
+        "modelId": 2037,
+        "name": "CH88379",
+        "organId": null,
+        "speciesId": "1",
+        "speciesName": "荔枝",
+        "sysId": 2,
+        "tel": "",
+        "typeId": "4",
+        "typeName": "仙进奉",
+        "vip": 0,
+        "virtual": false,
+        "zdzj": ""
+    },
+    "88388": {
+        "address": "广州市从化区",
+        "curPeriodId": 2,
+        "curPeriodName": "",
+        "curPhenologyId": 2,
+        "curPhenologyName": "控梢期",
+        "district": "\"广州市从化区\"",
+        "flyStyle": null,
+        "fruitsTypeId": "1",
+        "fruitsTypeItemId": "4",
+        "fruitsTypeItemName": "",
+        "fruitsTypeName": "",
+        "fzr": "模拟农场315",
+        "icon": "",
+        "location": null,
+        "mianji": "1",
+        "mock": 1,
+        "modelId": 2037,
+        "name": "CH88388",
+        "organId": null,
+        "speciesId": "1",
+        "speciesName": "荔枝",
+        "sysId": 2,
+        "tel": "",
+        "typeId": "4",
+        "typeName": "仙进奉",
+        "vip": 0,
+        "virtual": false,
+        "zdzj": ""
+    }
+}

+ 2794 - 0
public/farmData/workList.json

@@ -0,0 +1,2794 @@
+{
+    "88379": [
+        {
+            "id": "214936",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "15",
+            "farmWorkName": "膨果根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "5/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "5/5",
+                    "value": 4.0
+                },
+                {
+                    "date": "5/11",
+                    "value": 14.0
+                },
+                {
+                    "date": "5/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "膨果比例",
+            "beforeExecuteDate": "2025-04-25",
+            "executeDate": "2025-05-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高钾复合肥 1kg/棵",
+                    "pesticideFertilizerCode": "35",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "GF-PG",
+            "condition": "单树膨果率5%",
+            "solarName": "5月上旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,促进膨果转色",
+            "type": 1,
+            "execute": 3
+        },
+        {
+            "id": "214935",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "25",
+            "farmWorkName": "防病虫(小果)",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "4/10",
+                    "value": 3.0
+                },
+                {
+                    "date": "4/15",
+                    "value": 4.0
+                },
+                {
+                    "date": "4/17",
+                    "value": 15.0
+                },
+                {
+                    "date": "4/22",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "病虫比例",
+            "beforeExecuteDate": "2025-04-25",
+            "executeDate": "2025-04-25",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "阿维哒螨灵 1000倍",
+                    "pesticideFertilizerCode": "33",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "吡唑醚菌酯 2000倍",
+                    "pesticideFertilizerCode": "34",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                }
+            ],
+            "status": 2,
+            "code": "FC-XG",
+            "condition": "病虫痕迹10%",
+            "solarName": "4月下旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "提前防范,减少病虫基数",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214934",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "24",
+            "farmWorkName": "保果追肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "4/10",
+                    "value": 3.0
+                },
+                {
+                    "date": "4/15",
+                    "value": 4.0
+                },
+                {
+                    "date": "4/17",
+                    "value": 14.0
+                },
+                {
+                    "date": "4/22",
+                    "value": 25.0
+                }
+            ],
+            "indexName": "落果比例",
+            "beforeExecuteDate": "2025-04-15",
+            "executeDate": "2025-04-25",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "多肽氨基酸水溶肥 800倍",
+                    "pesticideFertilizerCode": "29",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "芸苔素内酯 15000倍",
+                    "pesticideFertilizerCode": "30",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 500倍",
+                    "pesticideFertilizerCode": "31",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "果动力(GA4+7) 2500倍",
+                    "pesticideFertilizerCode": "32",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "ZF-XG",
+            "condition": "阴天寡照预警III级",
+            "solarName": "4月下旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "追加营养,防止异常落果",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214933",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "14",
+            "farmWorkName": "壮果根肥",
+            "expertName": "韦帮稳",
+            "icon": 4,
+            "indexChart": [
+                {
+                    "date": "4/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "4/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "4/7",
+                    "value": 15.0
+                },
+                {
+                    "date": "4/12",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "幼果比例",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-04-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥0.5kg",
+                    "pesticideFertilizerCode": "36",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "硝酸铵钙 0.5kg/棵",
+                    "pesticideFertilizerCode": "28",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "GF-XG",
+            "condition": "单树小果率5%",
+            "solarName": "4月中旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,壮果保果",
+            "type": 1,
+            "execute": 3
+        },
+        {
+            "id": "214932",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "13",
+            "farmWorkName": "防病虫(花穗期)",
+            "expertName": "韦帮稳",
+            "icon": 3,
+            "indexChart": [
+                {
+                    "date": "3/1",
+                    "value": 19.0
+                },
+                {
+                    "date": "3/5",
+                    "value": 24.0
+                },
+                {
+                    "date": "3/7",
+                    "value": 36.0
+                },
+                {
+                    "date": "3/10",
+                    "value": 43.0
+                }
+            ],
+            "indexName": "花苞长度",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "灭百可 2000倍液",
+                    "pesticideFertilizerCode": "26",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "炭疫灵可湿性粉剂 800倍液",
+                    "pesticideFertilizerCode": "27",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                }
+            ],
+            "status": 2,
+            "code": "FC-HS",
+            "condition": "单树花苞率30%",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 1,
+            "num": null,
+            "purpose": "提前防范,减少病虫基数",
+            "type": 1,
+            "execute": 3
+        },
+        {
+            "id": "214931",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "23",
+            "farmWorkName": "控花",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "3/1",
+                    "value": 6.0
+                },
+                {
+                    "date": "3/5",
+                    "value": 9.0
+                },
+                {
+                    "date": "3/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "3/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "稀效唑 1250倍",
+                    "pesticideFertilizerCode": "25",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "KF-HS",
+            "condition": "花穗过长",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "见势就控,避免花穗过长",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214930",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "22",
+            "farmWorkName": "促花",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "3/1",
+                    "value": 6.0
+                },
+                {
+                    "date": "3/5",
+                    "value": 9.0
+                },
+                {
+                    "date": "3/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "3/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "赤霉酸水剂 1000倍",
+                    "pesticideFertilizerCode": "24",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "CF-HS",
+            "condition": "生长过慢",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "提前调控,促进花穗生长",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214929",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "21",
+            "farmWorkName": "壮花追肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "2/15",
+                    "value": 7.0
+                },
+                {
+                    "date": "2/20",
+                    "value": 9.0
+                },
+                {
+                    "date": "2/25",
+                    "value": 15.0
+                },
+                {
+                    "date": "3/1",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-02-25",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "大量元素叶面肥 500倍",
+                    "pesticideFertilizerCode": "21",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "钙镁硼中量元素益元液 500倍",
+                    "pesticideFertilizerCode": "22",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "微量元素益元液 10000倍",
+                    "pesticideFertilizerCode": "23",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "ZF-HS",
+            "condition": "生长过慢",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "追加营养,促花壮花",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214928",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "12",
+            "farmWorkName": "壮花根肥",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "1/30",
+                    "value": 7.0
+                },
+                {
+                    "date": "2/5",
+                    "value": 9.0
+                },
+                {
+                    "date": "2/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "2/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "花蕾比例",
+            "beforeExecuteDate": "2025-01-20",
+            "executeDate": "2025-02-25",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥0.5kg",
+                    "pesticideFertilizerCode": "36",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "GF-HS",
+            "condition": "单树花蕾率5%",
+            "solarName": "2月下旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,促花壮花",
+            "type": 1,
+            "execute": 2
+        },
+        {
+            "id": "214927",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "20",
+            "farmWorkName": "高温控梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-01-20",
+            "executeDate": "2025-01-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "乙烯利 1333倍",
+                    "pesticideFertilizerCode": "12",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "KS-BD",
+            "condition": "高温预警III级",
+            "solarName": "1月中旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "见势就控,控梢而不见梢",
+            "type": 2,
+            "execute": 3
+        },
+        {
+            "id": "214926",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "19",
+            "farmWorkName": "白点杀梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "1/20",
+                    "value": 2.0
+                },
+                {
+                    "date": "1/25",
+                    "value": 4.0
+                },
+                {
+                    "date": "2/1",
+                    "value": 6.0
+                },
+                {
+                    "date": "2/5",
+                    "value": 8.0
+                }
+            ],
+            "indexName": "花蕾比例",
+            "beforeExecuteDate": "2025-01-20",
+            "executeDate": "2025-01-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "小叶素 3000倍",
+                    "pesticideFertilizerCode": "13",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "SS-BD",
+            "condition": "嫩叶率10%",
+            "solarName": "1月中旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "见小叶就杀,促进花芽分化",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214925",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "18",
+            "farmWorkName": "叶面追肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [],
+            "indexName": "冲梢比例",
+            "beforeExecuteDate": "2025-01-10",
+            "executeDate": "2025-01-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "钙肥 100倍",
+                    "pesticideFertilizerCode": "18",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "赤霉酸 2000倍",
+                    "pesticideFertilizerCode": "19",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "佳果天成 250ppm",
+                    "pesticideFertilizerCode": "20",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 1,
+            "code": "ZF-BD",
+            "condition": "阴天寡照预警III级",
+            "solarName": "1月中旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "追加营养,加速花芽萌动",
+            "type": 0,
+            "execute": 0
+        },
+        {
+            "id": "214924",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "11",
+            "farmWorkName": "催醒营养",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "1/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "1/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "1/11",
+                    "value": 15.0
+                },
+                {
+                    "date": "1/15",
+                    "value": 26.0
+                }
+            ],
+            "indexName": "花芽萌动比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2025-01-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "矿源黄腐酸钾",
+                    "pesticideFertilizerCode": "14",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "灌水",
+                    "pesticideFertilizerCode": "15",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "细胞分裂素 25ppm",
+                    "pesticideFertilizerCode": "16",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "红糖 200倍",
+                    "pesticideFertilizerCode": "17",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-BD",
+            "condition": "果园花芽率5%",
+            "solarName": "1月上旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,促进花芽萌动",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214923",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "17",
+            "farmWorkName": "冬季杀梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "11.10",
+                    "value": 13.0
+                },
+                {
+                    "date": "11.17",
+                    "value": 9.0
+                },
+                {
+                    "date": "11.22",
+                    "value": 8.0
+                },
+                {
+                    "date": "12.5",
+                    "value": 6.0
+                }
+            ],
+            "indexName": "冲梢比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "小叶素 3000倍",
+                    "pesticideFertilizerCode": "13",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 0,
+            "code": "SS-KS",
+            "condition": "嫩叶率30%",
+            "solarName": "11月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "见小叶就杀,促进花芽分化",
+            "type": 0,
+            "execute": 4
+        },
+        {
+            "id": "214922",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "16",
+            "farmWorkName": "冬季控梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "11.10",
+                    "value": 9.0
+                },
+                {
+                    "date": "11.17",
+                    "value": 6.0
+                },
+                {
+                    "date": "11.22",
+                    "value": 5.0
+                },
+                {
+                    "date": "12.5",
+                    "value": 2.0
+                }
+            ],
+            "indexName": "叶芽比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "乙烯利 1333倍",
+                    "pesticideFertilizerCode": "12",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 0,
+            "code": "KS-KS",
+            "condition": "萌动率10%",
+            "solarName": "11月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "见叶芽就控,控梢而不见梢",
+            "type": 0,
+            "execute": 4
+        },
+        {
+            "id": "214921",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "10",
+            "farmWorkName": "冬季清园",
+            "expertName": "韦帮稳",
+            "icon": 4,
+            "indexChart": [
+                {
+                    "date": "10/10",
+                    "value": 55.0
+                },
+                {
+                    "date": "10/17",
+                    "value": 67.0
+                },
+                {
+                    "date": "10/22",
+                    "value": 75.0
+                },
+                {
+                    "date": "11/5",
+                    "value": 82.0
+                }
+            ],
+            "indexName": "末梢老熟比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "苏云金杆菌 700倍",
+                    "pesticideFertilizerCode": "10",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "磷酸二氢钾 800倍",
+                    "pesticideFertilizerCode": "11",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-KS",
+            "condition": "进入控梢期",
+            "solarName": "11月中旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "提前防范,减少病虫基数",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214920",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "9",
+            "farmWorkName": "冬季基肥",
+            "expertName": "韦帮稳",
+            "icon": 3,
+            "indexChart": [
+                {
+                    "date": "10/10",
+                    "value": 53.0
+                },
+                {
+                    "date": "10/17",
+                    "value": 62.0
+                },
+                {
+                    "date": "10/22",
+                    "value": 75.0
+                },
+                {
+                    "date": "11/5",
+                    "value": 86.0
+                }
+            ],
+            "indexName": "末次梢老熟比例",
+            "beforeExecuteDate": "2024-10-05",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "鸡粪有机肥 15kg/棵",
+                    "pesticideFertilizerCode": "7",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "钾肥 0.5kg/棵",
+                    "pesticideFertilizerCode": "8",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "JF-KS",
+            "condition": "进入控梢期",
+            "solarName": "11月中旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "养好树体,提供全年营养",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214919",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "2",
+            "farmWorkName": "秋梢防虫",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "9/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "9/13",
+                    "value": 25.0
+                },
+                {
+                    "date": "9/17",
+                    "value": 33.0
+                },
+                {
+                    "date": "9/20",
+                    "value": 44.0
+                }
+            ],
+            "indexName": "嫩叶比例",
+            "beforeExecuteDate": "2024-09-20",
+            "executeDate": "2024-10-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "代森锰锌 600倍",
+                    "pesticideFertilizerCode": "4",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "0.1%硫酸镁",
+                    "pesticideFertilizerCode": "5",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "0.3%磷酸二氢钾",
+                    "pesticideFertilizerCode": "6",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-QS02",
+            "condition": "单树嫩叶率30%",
+            "solarName": "******",
+            "reCheck": 1,
+            "menu": 0,
+            "num": 3,
+            "purpose": "见梢就防,防虫不见虫",
+            "type": 1,
+            "execute": 2
+        },
+        {
+            "id": "214918",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "1",
+            "farmWorkName": "秋梢根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "9/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "9/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "9/11",
+                    "value": 14.0
+                },
+                {
+                    "date": "9/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "萌动比例",
+            "beforeExecuteDate": "2024-10-05",
+            "executeDate": "2024-09-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥 1.5kg/棵",
+                    "pesticideFertilizerCode": "1",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 0.5kg/棵",
+                    "pesticideFertilizerCode": "2",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-QS02",
+            "condition": "单树萌动率5%",
+            "solarName": "******",
+            "reCheck": 0,
+            "menu": 0,
+            "num": 3,
+            "purpose": "施足营养,培育健壮母枝",
+            "type": 1,
+            "execute": 2
+        },
+        {
+            "id": "214917",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "4",
+            "farmWorkName": "秋梢防虫",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "9/10",
+                    "value": 15.0
+                },
+                {
+                    "date": "9/13",
+                    "value": 24.0
+                },
+                {
+                    "date": "9/17",
+                    "value": 33.0
+                },
+                {
+                    "date": "9/20",
+                    "value": 43.0
+                }
+            ],
+            "indexName": "嫩叶比例",
+            "beforeExecuteDate": "2024-09-20",
+            "executeDate": "2024-10-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "代森锰锌 600倍",
+                    "pesticideFertilizerCode": "4",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "0.1%硫酸镁",
+                    "pesticideFertilizerCode": "5",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "0.3%磷酸二氢钾",
+                    "pesticideFertilizerCode": "6",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-QS02",
+            "condition": "单树嫩叶率30%",
+            "solarName": "10月上旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": 2,
+            "purpose": "见梢就防,防虫不见虫",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214916",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "3",
+            "farmWorkName": "秋梢根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "9/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "9/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "9/11",
+                    "value": 15.0
+                },
+                {
+                    "date": "9/15",
+                    "value": 25.0
+                }
+            ],
+            "indexName": "萌动比例",
+            "beforeExecuteDate": "2024-09-05",
+            "executeDate": "2024-09-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥 1.5kg/棵",
+                    "pesticideFertilizerCode": "1",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 0.5kg/棵",
+                    "pesticideFertilizerCode": "2",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-QS02",
+            "condition": "单树萌动率5%",
+            "solarName": "9月下旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": 2,
+            "purpose": "施足营养,培育健壮母枝",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214915",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "27",
+            "farmWorkName": "秋梢防虫",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "8/10",
+                    "value": 15.0
+                },
+                {
+                    "date": "8/13",
+                    "value": 25.0
+                },
+                {
+                    "date": "8/17",
+                    "value": 36.0
+                },
+                {
+                    "date": "8/20",
+                    "value": 43.0
+                }
+            ],
+            "indexName": "嫩叶比例",
+            "beforeExecuteDate": "2024-08-20",
+            "executeDate": "2024-09-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "代森锰锌 600倍",
+                    "pesticideFertilizerCode": "4",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "0.1%硫酸镁",
+                    "pesticideFertilizerCode": "5",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "0.3%磷酸二氢钾",
+                    "pesticideFertilizerCode": "6",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-QS01",
+            "condition": "单树嫩叶率30%",
+            "solarName": "9月上旬",
+            "reCheck": 1,
+            "menu": 1,
+            "num": 1,
+            "purpose": "见梢就防,防虫不见虫",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214914",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "26",
+            "farmWorkName": "秋梢根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "8/1",
+                    "value": 2.0
+                },
+                {
+                    "date": "8/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "8/11",
+                    "value": 15.0
+                },
+                {
+                    "date": "8/15",
+                    "value": 26.0
+                }
+            ],
+            "indexName": "萌动比例",
+            "beforeExecuteDate": null,
+            "executeDate": "2024-08-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥 1.5kg/棵",
+                    "pesticideFertilizerCode": "1",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 0.5kg/棵",
+                    "pesticideFertilizerCode": "2",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-QS01",
+            "condition": "单树萌动率5%",
+            "solarName": "8月下旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": 1,
+            "purpose": "施足营养,培育健壮母枝",
+            "type": 1,
+            "execute": 4
+        }
+    ],
+    "88388": [
+        {
+            "id": "111214936",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "15",
+            "farmWorkName": "膨果根肥111",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "5/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "5/5",
+                    "value": 4.0
+                },
+                {
+                    "date": "5/11",
+                    "value": 14.0
+                },
+                {
+                    "date": "5/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "膨果比例",
+            "beforeExecuteDate": "2025-04-25",
+            "executeDate": "2025-05-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高钾复合肥 1kg/棵",
+                    "pesticideFertilizerCode": "35",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "GF-PG",
+            "condition": "单树膨果率5%",
+            "solarName": "5月上旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,促进膨果转色",
+            "type": 1,
+            "execute": 3
+        },
+        {
+            "id": "214935",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "25",
+            "farmWorkName": "防病虫(小果)",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "4/10",
+                    "value": 3.0
+                },
+                {
+                    "date": "4/15",
+                    "value": 4.0
+                },
+                {
+                    "date": "4/17",
+                    "value": 15.0
+                },
+                {
+                    "date": "4/22",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "病虫比例",
+            "beforeExecuteDate": "2025-04-25",
+            "executeDate": "2025-04-25",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "阿维哒螨灵 1000倍",
+                    "pesticideFertilizerCode": "33",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "吡唑醚菌酯 2000倍",
+                    "pesticideFertilizerCode": "34",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                }
+            ],
+            "status": 2,
+            "code": "FC-XG",
+            "condition": "病虫痕迹10%",
+            "solarName": "4月下旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "提前防范,减少病虫基数",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214934",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "24",
+            "farmWorkName": "保果追肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "4/10",
+                    "value": 3.0
+                },
+                {
+                    "date": "4/15",
+                    "value": 4.0
+                },
+                {
+                    "date": "4/17",
+                    "value": 14.0
+                },
+                {
+                    "date": "4/22",
+                    "value": 25.0
+                }
+            ],
+            "indexName": "落果比例",
+            "beforeExecuteDate": "2025-04-15",
+            "executeDate": "2025-04-25",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "多肽氨基酸水溶肥 800倍",
+                    "pesticideFertilizerCode": "29",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "芸苔素内酯 15000倍",
+                    "pesticideFertilizerCode": "30",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 500倍",
+                    "pesticideFertilizerCode": "31",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "果动力(GA4+7) 2500倍",
+                    "pesticideFertilizerCode": "32",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "ZF-XG",
+            "condition": "阴天寡照预警III级",
+            "solarName": "4月下旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "追加营养,防止异常落果",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214933",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "14",
+            "farmWorkName": "壮果根肥",
+            "expertName": "韦帮稳",
+            "icon": 4,
+            "indexChart": [
+                {
+                    "date": "4/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "4/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "4/7",
+                    "value": 15.0
+                },
+                {
+                    "date": "4/12",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "幼果比例",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-04-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥0.5kg",
+                    "pesticideFertilizerCode": "36",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "硝酸铵钙 0.5kg/棵",
+                    "pesticideFertilizerCode": "28",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "GF-XG",
+            "condition": "单树小果率5%",
+            "solarName": "4月中旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,壮果保果",
+            "type": 1,
+            "execute": 3
+        },
+        {
+            "id": "214932",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "13",
+            "farmWorkName": "防病虫(花穗期)",
+            "expertName": "韦帮稳",
+            "icon": 3,
+            "indexChart": [
+                {
+                    "date": "3/1",
+                    "value": 19.0
+                },
+                {
+                    "date": "3/5",
+                    "value": 24.0
+                },
+                {
+                    "date": "3/7",
+                    "value": 36.0
+                },
+                {
+                    "date": "3/10",
+                    "value": 43.0
+                }
+            ],
+            "indexName": "花苞长度",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "灭百可 2000倍液",
+                    "pesticideFertilizerCode": "26",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "炭疫灵可湿性粉剂 800倍液",
+                    "pesticideFertilizerCode": "27",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                }
+            ],
+            "status": 2,
+            "code": "FC-HS",
+            "condition": "单树花苞率30%",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 1,
+            "num": null,
+            "purpose": "提前防范,减少病虫基数",
+            "type": 1,
+            "execute": 3
+        },
+        {
+            "id": "214931",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "23",
+            "farmWorkName": "控花",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "3/1",
+                    "value": 6.0
+                },
+                {
+                    "date": "3/5",
+                    "value": 9.0
+                },
+                {
+                    "date": "3/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "3/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "稀效唑 1250倍",
+                    "pesticideFertilizerCode": "25",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "KF-HS",
+            "condition": "花穗过长",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "见势就控,避免花穗过长",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214930",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "22",
+            "farmWorkName": "促花",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "3/1",
+                    "value": 6.0
+                },
+                {
+                    "date": "3/5",
+                    "value": 9.0
+                },
+                {
+                    "date": "3/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "3/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-03-15",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "赤霉酸水剂 1000倍",
+                    "pesticideFertilizerCode": "24",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "CF-HS",
+            "condition": "生长过慢",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "提前调控,促进花穗生长",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214929",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "21",
+            "farmWorkName": "壮花追肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "2/15",
+                    "value": 7.0
+                },
+                {
+                    "date": "2/20",
+                    "value": 9.0
+                },
+                {
+                    "date": "2/25",
+                    "value": 15.0
+                },
+                {
+                    "date": "3/1",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-02-25",
+            "executeDate": "2025-03-15",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "大量元素叶面肥 500倍",
+                    "pesticideFertilizerCode": "21",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "钙镁硼中量元素益元液 500倍",
+                    "pesticideFertilizerCode": "22",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "微量元素益元液 10000倍",
+                    "pesticideFertilizerCode": "23",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "ZF-HS",
+            "condition": "生长过慢",
+            "solarName": "3月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "追加营养,促花壮花",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214928",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "12",
+            "farmWorkName": "壮花根肥",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "1/30",
+                    "value": 7.0
+                },
+                {
+                    "date": "2/5",
+                    "value": 9.0
+                },
+                {
+                    "date": "2/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "2/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "花蕾比例",
+            "beforeExecuteDate": "2025-01-20",
+            "executeDate": "2025-02-25",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥0.5kg",
+                    "pesticideFertilizerCode": "36",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 2,
+            "code": "GF-HS",
+            "condition": "单树花蕾率5%",
+            "solarName": "2月下旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,促花壮花",
+            "type": 1,
+            "execute": 2
+        },
+        {
+            "id": "214927",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "20",
+            "farmWorkName": "高温控梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [],
+            "indexName": "生长速度",
+            "beforeExecuteDate": "2025-01-20",
+            "executeDate": "2025-01-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "乙烯利 1333倍",
+                    "pesticideFertilizerCode": "12",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "KS-BD",
+            "condition": "高温预警III级",
+            "solarName": "1月中旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "见势就控,控梢而不见梢",
+            "type": 2,
+            "execute": 3
+        },
+        {
+            "id": "214926",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "19",
+            "farmWorkName": "白点杀梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "1/20",
+                    "value": 2.0
+                },
+                {
+                    "date": "1/25",
+                    "value": 4.0
+                },
+                {
+                    "date": "2/1",
+                    "value": 6.0
+                },
+                {
+                    "date": "2/5",
+                    "value": 8.0
+                }
+            ],
+            "indexName": "花蕾比例",
+            "beforeExecuteDate": "2025-01-20",
+            "executeDate": "2025-01-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "小叶素 3000倍",
+                    "pesticideFertilizerCode": "13",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 2,
+            "code": "SS-BD",
+            "condition": "嫩叶率10%",
+            "solarName": "1月中旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "见小叶就杀,促进花芽分化",
+            "type": 0,
+            "execute": 3
+        },
+        {
+            "id": "214925",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "18",
+            "farmWorkName": "叶面追肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [],
+            "indexName": "冲梢比例",
+            "beforeExecuteDate": "2025-01-10",
+            "executeDate": "2025-01-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "钙肥 100倍",
+                    "pesticideFertilizerCode": "18",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "赤霉酸 2000倍",
+                    "pesticideFertilizerCode": "19",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "佳果天成 250ppm",
+                    "pesticideFertilizerCode": "20",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 1,
+            "code": "ZF-BD",
+            "condition": "阴天寡照预警III级",
+            "solarName": "1月中旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": null,
+            "purpose": "追加营养,加速花芽萌动",
+            "type": 0,
+            "execute": 0
+        },
+        {
+            "id": "214924",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "11",
+            "farmWorkName": "催醒营养",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "1/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "1/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "1/11",
+                    "value": 15.0
+                },
+                {
+                    "date": "1/15",
+                    "value": 26.0
+                }
+            ],
+            "indexName": "花芽萌动比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2025-01-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "矿源黄腐酸钾",
+                    "pesticideFertilizerCode": "14",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "灌水",
+                    "pesticideFertilizerCode": "15",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "细胞分裂素 25ppm",
+                    "pesticideFertilizerCode": "16",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                },
+                {
+                    "id": null,
+                    "name": "红糖 200倍",
+                    "pesticideFertilizerCode": "17",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-BD",
+            "condition": "果园花芽率5%",
+            "solarName": "1月上旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "施足营养,促进花芽萌动",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214923",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "17",
+            "farmWorkName": "冬季杀梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "11.10",
+                    "value": 13.0
+                },
+                {
+                    "date": "11.17",
+                    "value": 9.0
+                },
+                {
+                    "date": "11.22",
+                    "value": 8.0
+                },
+                {
+                    "date": "12.5",
+                    "value": 6.0
+                }
+            ],
+            "indexName": "冲梢比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "小叶素 3000倍",
+                    "pesticideFertilizerCode": "13",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 0,
+            "code": "SS-KS",
+            "condition": "嫩叶率30%",
+            "solarName": "11月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "见小叶就杀,促进花芽分化",
+            "type": 0,
+            "execute": 4
+        },
+        {
+            "id": "214922",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "16",
+            "farmWorkName": "冬季控梢",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "11.10",
+                    "value": 9.0
+                },
+                {
+                    "date": "11.17",
+                    "value": 6.0
+                },
+                {
+                    "date": "11.22",
+                    "value": 5.0
+                },
+                {
+                    "date": "12.5",
+                    "value": 2.0
+                }
+            ],
+            "indexName": "叶芽比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "乙烯利 1333倍",
+                    "pesticideFertilizerCode": "12",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "调节"
+                }
+            ],
+            "status": 0,
+            "code": "KS-KS",
+            "condition": "萌动率10%",
+            "solarName": "11月中旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": null,
+            "purpose": "见叶芽就控,控梢而不见梢",
+            "type": 0,
+            "execute": 4
+        },
+        {
+            "id": "214921",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "10",
+            "farmWorkName": "冬季清园",
+            "expertName": "韦帮稳",
+            "icon": 4,
+            "indexChart": [
+                {
+                    "date": "10/10",
+                    "value": 55.0
+                },
+                {
+                    "date": "10/17",
+                    "value": 67.0
+                },
+                {
+                    "date": "10/22",
+                    "value": 75.0
+                },
+                {
+                    "date": "11/5",
+                    "value": 82.0
+                }
+            ],
+            "indexName": "末梢老熟比例",
+            "beforeExecuteDate": "2024-11-10",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "苏云金杆菌 700倍",
+                    "pesticideFertilizerCode": "10",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "磷酸二氢钾 800倍",
+                    "pesticideFertilizerCode": "11",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-KS",
+            "condition": "进入控梢期",
+            "solarName": "11月中旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "提前防范,减少病虫基数",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214920",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "9",
+            "farmWorkName": "冬季基肥",
+            "expertName": "韦帮稳",
+            "icon": 3,
+            "indexChart": [
+                {
+                    "date": "10/10",
+                    "value": 53.0
+                },
+                {
+                    "date": "10/17",
+                    "value": 62.0
+                },
+                {
+                    "date": "10/22",
+                    "value": 75.0
+                },
+                {
+                    "date": "11/5",
+                    "value": 86.0
+                }
+            ],
+            "indexName": "末次梢老熟比例",
+            "beforeExecuteDate": "2024-10-05",
+            "executeDate": "2024-11-10",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "鸡粪有机肥 15kg/棵",
+                    "pesticideFertilizerCode": "7",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "钾肥 0.5kg/棵",
+                    "pesticideFertilizerCode": "8",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "JF-KS",
+            "condition": "进入控梢期",
+            "solarName": "11月中旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": null,
+            "purpose": "养好树体,提供全年营养",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214919",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "2",
+            "farmWorkName": "秋梢防虫",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "9/10",
+                    "value": 14.0
+                },
+                {
+                    "date": "9/13",
+                    "value": 25.0
+                },
+                {
+                    "date": "9/17",
+                    "value": 33.0
+                },
+                {
+                    "date": "9/20",
+                    "value": 44.0
+                }
+            ],
+            "indexName": "嫩叶比例",
+            "beforeExecuteDate": "2024-09-20",
+            "executeDate": "2024-10-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "代森锰锌 600倍",
+                    "pesticideFertilizerCode": "4",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "0.1%硫酸镁",
+                    "pesticideFertilizerCode": "5",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "0.3%磷酸二氢钾",
+                    "pesticideFertilizerCode": "6",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-QS02",
+            "condition": "单树嫩叶率30%",
+            "solarName": "******",
+            "reCheck": 1,
+            "menu": 0,
+            "num": 3,
+            "purpose": "见梢就防,防虫不见虫",
+            "type": 1,
+            "execute": 2
+        },
+        {
+            "id": "214918",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "1",
+            "farmWorkName": "秋梢根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "9/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "9/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "9/11",
+                    "value": 14.0
+                },
+                {
+                    "date": "9/15",
+                    "value": 24.0
+                }
+            ],
+            "indexName": "萌动比例",
+            "beforeExecuteDate": "2024-10-05",
+            "executeDate": "2024-09-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥 1.5kg/棵",
+                    "pesticideFertilizerCode": "1",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 0.5kg/棵",
+                    "pesticideFertilizerCode": "2",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-QS02",
+            "condition": "单树萌动率5%",
+            "solarName": "******",
+            "reCheck": 0,
+            "menu": 0,
+            "num": 3,
+            "purpose": "施足营养,培育健壮母枝",
+            "type": 1,
+            "execute": 2
+        },
+        {
+            "id": "214917",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "4",
+            "farmWorkName": "秋梢防虫",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "9/10",
+                    "value": 15.0
+                },
+                {
+                    "date": "9/13",
+                    "value": 24.0
+                },
+                {
+                    "date": "9/17",
+                    "value": 33.0
+                },
+                {
+                    "date": "9/20",
+                    "value": 43.0
+                }
+            ],
+            "indexName": "嫩叶比例",
+            "beforeExecuteDate": "2024-09-20",
+            "executeDate": "2024-10-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "代森锰锌 600倍",
+                    "pesticideFertilizerCode": "4",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "0.1%硫酸镁",
+                    "pesticideFertilizerCode": "5",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "0.3%磷酸二氢钾",
+                    "pesticideFertilizerCode": "6",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-QS02",
+            "condition": "单树嫩叶率30%",
+            "solarName": "10月上旬",
+            "reCheck": 1,
+            "menu": 0,
+            "num": 2,
+            "purpose": "见梢就防,防虫不见虫",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214916",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "3",
+            "farmWorkName": "秋梢根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "9/1",
+                    "value": 3.0
+                },
+                {
+                    "date": "9/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "9/11",
+                    "value": 15.0
+                },
+                {
+                    "date": "9/15",
+                    "value": 25.0
+                }
+            ],
+            "indexName": "萌动比例",
+            "beforeExecuteDate": "2024-09-05",
+            "executeDate": "2024-09-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥 1.5kg/棵",
+                    "pesticideFertilizerCode": "1",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 0.5kg/棵",
+                    "pesticideFertilizerCode": "2",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-QS02",
+            "condition": "单树萌动率5%",
+            "solarName": "9月下旬",
+            "reCheck": 0,
+            "menu": 0,
+            "num": 2,
+            "purpose": "施足营养,培育健壮母枝",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214915",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "27",
+            "farmWorkName": "秋梢防虫",
+            "expertName": "韦帮稳",
+            "icon": 2,
+            "indexChart": [
+                {
+                    "date": "8/10",
+                    "value": 15.0
+                },
+                {
+                    "date": "8/13",
+                    "value": 25.0
+                },
+                {
+                    "date": "8/17",
+                    "value": 36.0
+                },
+                {
+                    "date": "8/20",
+                    "value": 43.0
+                }
+            ],
+            "indexName": "嫩叶比例",
+            "beforeExecuteDate": "2024-08-20",
+            "executeDate": "2024-09-05",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "高效氯氟氰菊酯 2000倍",
+                    "pesticideFertilizerCode": "3",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "代森锰锌 600倍",
+                    "pesticideFertilizerCode": "4",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "病虫"
+                },
+                {
+                    "id": null,
+                    "name": "0.1%硫酸镁",
+                    "pesticideFertilizerCode": "5",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "0.3%磷酸二氢钾",
+                    "pesticideFertilizerCode": "6",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "FC-QS01",
+            "condition": "单树嫩叶率30%",
+            "solarName": "9月上旬",
+            "reCheck": 1,
+            "menu": 1,
+            "num": 1,
+            "purpose": "见梢就防,防虫不见虫",
+            "type": 1,
+            "execute": 4
+        },
+        {
+            "id": "214914",
+            "expert": 81653,
+            "progress": 1,
+            "farmId": 766,
+            "farmWorkId": "26",
+            "farmWorkName": "秋梢根肥",
+            "expertName": "韦帮稳",
+            "icon": 1,
+            "indexChart": [
+                {
+                    "date": "8/1",
+                    "value": 2.0
+                },
+                {
+                    "date": "8/5",
+                    "value": 5.0
+                },
+                {
+                    "date": "8/11",
+                    "value": 15.0
+                },
+                {
+                    "date": "8/15",
+                    "value": 26.0
+                }
+            ],
+            "indexName": "萌动比例",
+            "beforeExecuteDate": null,
+            "executeDate": "2024-08-20",
+            "offerStores": [],
+            "pesticideFertilizerList": [
+                {
+                    "id": null,
+                    "name": "3个15复合肥 1.5kg/棵",
+                    "pesticideFertilizerCode": "1",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                },
+                {
+                    "id": null,
+                    "name": "尿素 0.5kg/棵",
+                    "pesticideFertilizerCode": "2",
+                    "ratio": null,
+                    "count": 0,
+                    "typeName": "营养"
+                }
+            ],
+            "status": 0,
+            "code": "GF-QS01",
+            "condition": "单树萌动率5%",
+            "solarName": "8月下旬",
+            "reCheck": 0,
+            "menu": 1,
+            "num": 1,
+            "purpose": "施足营养,培育健壮母枝",
+            "type": 1,
+            "execute": 4
+        }
+    ]
+}

+ 1 - 1
public/index.html

@@ -15,7 +15,7 @@
         <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
         <link rel="icon" href="favicon.ico" />
         <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/qweather-icons@1.3.0/font/qweather-icons.css">
-        <title>飞鸟智慧确权平台</title>
+        <title>飞鸟智慧巡园平台</title>
     </head>
     <body>
         <noscript>

BIN
src/assets/images/warningHome/alarm-active-arrow.png


BIN
src/assets/images/warningHome/alarm-active.png


BIN
src/assets/images/warningHome/alarm-bg.png


BIN
src/assets/images/warningHome/alarm-bg2.png


BIN
src/assets/images/warningHome/box-bg.png


BIN
src/assets/images/warningHome/box-top.png


BIN
src/assets/images/warningHome/camera-icon.png


BIN
src/assets/images/warningHome/close-btn.png


BIN
src/assets/images/warningHome/expert-icon.png


BIN
src/assets/images/warningHome/gallery/camera-icon.png


BIN
src/assets/images/warningHome/gallery/camera.png


BIN
src/assets/images/warningHome/gallery/icon-0.png


BIN
src/assets/images/warningHome/gallery/icon-1.png


BIN
src/assets/images/warningHome/gallery/icon-10.png


BIN
src/assets/images/warningHome/gallery/icon-11.png


BIN
src/assets/images/warningHome/gallery/icon-12.png


BIN
src/assets/images/warningHome/gallery/icon-13.png


BIN
src/assets/images/warningHome/gallery/icon-2.png


BIN
src/assets/images/warningHome/gallery/icon-3.png


BIN
src/assets/images/warningHome/gallery/icon-4-no.png


BIN
src/assets/images/warningHome/gallery/icon-4.png


BIN
src/assets/images/warningHome/gallery/icon-5.png


BIN
src/assets/images/warningHome/gallery/icon-6.png


BIN
src/assets/images/warningHome/gallery/icon-7.png


BIN
src/assets/images/warningHome/gallery/icon-8.png


BIN
src/assets/images/warningHome/gallery/icon-9.png


BIN
src/assets/images/warningHome/gallery/log-bg.png


BIN
src/assets/images/warningHome/log-bg.png


BIN
src/assets/images/warningHome/lz.png


BIN
src/assets/images/warningHome/search-img.png


BIN
src/assets/images/warningHome/t.png


BIN
src/assets/images/warningHome/watermark/feiniao.png


BIN
src/assets/images/warningHome/watermark/fushe.png


BIN
src/assets/images/warningHome/watermark/shidu.png


BIN
src/assets/images/warningHome/watermark/temp.png


+ 6 - 0
src/router/mainRoutes.js

@@ -8,6 +8,12 @@
  */
 export default [
     {
+        path: "/warningHome",
+        name: "warningHome",
+        component: () => import("@/views/warningHome/index.vue"),
+        // component: () => import("@/views/authentic/index.vue"),
+    },
+    {
         path: "/home",
         name: "Home",
         component: () => import("@/views/home/index.vue"),

+ 3 - 2
src/views/Login.vue

@@ -10,7 +10,7 @@
   <div class="backdrop-layer">
     <div class="head">
       <div class="logo"></div>
-      <div class="title">飞鸟智慧确权平台
+      <div class="title">飞鸟智慧巡园平台
 
       </div>
     </div>
@@ -114,7 +114,8 @@ const onSubmit = () => {
                 res.data["pwd"] = undefined
                 store.commit(`app/${SET_USER_INFO}`, JSON.stringify(res.data));
                 success.value = true;
-                router.push({ name: "Home" });
+                // router.push({ name: "Home" });
+                router.push({ name: "warningHome" });
             }
         } else {
             return;

+ 2 - 1
src/views/components/Header.vue

@@ -41,7 +41,8 @@ onMounted(() => {
 function goBack() {
 //   emit("goBack");
 //   router.go(1)
-  router.push('/home') 
+  // router.push('/home') 
+  router.push('/warningHome') 
 }
 
 </script>

+ 123 - 0
src/views/warningHome/components/alarmList.vue

@@ -0,0 +1,123 @@
+<template>
+    <div class="alarm-wrap">
+        <div class="alarm-t">
+            <div class="alarm-tag">
+                <img src="@/assets/images/warningHome/alarm-bg.png" />
+            </div>
+            <div class="alarm-item-wrap">
+                <div class="item-wrap">
+                    <div
+                        class="alarm-item"
+                        v-for="(item, index) in alarmList"
+                        :key="index"
+                        @click="toggleAlarm(item, index)"
+                        :class="{ active: activeAlarm === item.id }"
+                    >
+                        {{ item.name }}
+                        <div class="active-arrow" v-if="activeAlarm === item.id"><img src="@/assets/images/warningHome/alarm-active-arrow.png" /></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="alarm-t alarm-b">
+            <div class="alarm-tag">
+                <img src="@/assets/images/warningHome/alarm-bg2.png" />
+            </div>
+            <div class="alarm-item-wrap">
+                <div class="item-wrap">
+                    <div
+                        class="alarm-item"
+                        v-for="(item, index) in alarmFactorList"
+                        :key="index"
+                        @click="toggleAlarm(item, index)"
+                        :class="{ active: activeAlarm === item.id }"
+                    >
+                        {{ item.name }}
+                        <div class="active-arrow" v-if="activeAlarm === item.id"><img src="@/assets/images/warningHome/alarm-active-arrow.png" /></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+import { ref } from "vue";
+
+const alarmList = ref([
+    { name: "低温冻害", id: 1 },
+    { name: "干旱缺水", id: 2 },
+    { name: "冲梢风险", id: 3 },
+    { name: "病虫风险", id: 4 },
+]);
+const alarmFactorList = ref([
+    { name: "温度因子", id: 21 },
+    { name: "土壤水分", id: 22 },
+    { name: "阴坡阳坡", id: 23 },
+]);
+
+const activeAlarm = ref(1);
+const toggleAlarm = (item, index) => {
+    console.log("toggleAlarm");
+    activeAlarm.value = item.id;
+};
+</script>
+
+<style lang="scss" scoped>
+.alarm-wrap {
+    background: rgba(255, 255, 255, 0.1);
+    border: 1px solid #9f9f9f;
+    border-radius: 8px;
+    width: 87px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    .alarm-t {
+        width: 100%;
+        padding-top: 18px;
+        .alarm-tag {
+            position: relative;
+            left: -8px;
+        }
+        .alarm-item-wrap {
+            padding: 0 12px;
+            .item-wrap {
+                padding: 12px 0 24px 0;
+                border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+                .alarm-item {
+                    cursor: pointer;
+                    background: #232323;
+                    width: 62px;
+                    padding: 7px 10px;
+                    box-sizing: border-box;
+                    display: flex;
+                    align-items: center;
+                    justify-content: center;
+                    font-size: 20px;
+                    font-family: "PangMenZhengDao";
+                    border-radius: 4px;
+                    &.active {
+                        margin-bottom: 34px;
+                        position: relative;
+                        color: #FFD489;
+                        background: url("@/assets/images/warningHome/alarm-active.png") no-repeat center center /cover;
+                    }
+                    .active-arrow {
+                        position: absolute;
+                        bottom: -30px;
+                    }
+                    &:last-child {
+                        &.active {
+                            margin-bottom: 14px;
+                        }
+                    }
+                }
+                .alarm-item + .alarm-item {
+                    margin-top: 8px;
+                }
+            }
+        }
+    }
+}
+</style>

+ 909 - 0
src/views/warningHome/components/album.vue

@@ -0,0 +1,909 @@
+<template>
+    <div class="album-page">
+        <div class="album-wrap" ref="scrollContainer">
+            <div class="barrage-title">
+                <img src="@/assets/images/common/chart-icon.png" />
+                荔博园
+            </div>
+            <div class="album-content">
+                <div class="album-top" v-if="farmDetail?.name">
+                    <div class="album-img">
+                        <img src="@/assets/images/warningHome/t.png" />
+                        <!-- <img :src="farmDetail.icon" /> -->
+                    </div>
+                    <div class="garden-content">
+                        <div class="garden-name">
+                            农场名称:{{ farmDetail.name }}
+                            <div class="tag-wrap">
+                                <div class="type-tag">{{ farmDetail.speciesName }}</div>
+                                <div class="type-tag item-type">{{ farmDetail.typeName }}</div>
+                            </div>
+                        </div>
+                        <div class="garden-desc">农场面积:{{ farmDetail.mianji }}亩</div>
+                        <div class="garden-desc">农场位置:{{ farmDetail.address }}</div>
+                    </div>
+                </div>
+                <div class="album-bottom">
+                    <el-affix :offset="44" target=".album-bottom">
+                        <div class="album-l">
+                            <el-menu default-active="0" class="el-menu-vertical-demo">
+                                <el-menu-item
+                                    v-for="(item, index) in farmWorkList"
+                                    :key="index"
+                                    :index="index.toString()"
+                                    :id="'menu' + index"
+                                    :class="{ active: activeSection === index }"
+                                    @click="scrollToSection(index)"
+                                    v-show="item.menu"
+                                >
+                                    <img
+                                        class="menu-icon"
+                                        :src="
+                                            require('@/assets/images/warningHome/gallery/icon-' +
+                                                item.icon +
+                                                (item.statuss === 0 ? '-no' : '') +
+                                                '.png')
+                                        "
+                                    />
+                                    <div
+                                        :class="[
+                                            'menu-name',
+                                            {
+                                                noTime: item.status === 0,
+                                                onTime: item.status === 2,
+                                                now: item.status === 1,
+                                            },
+                                        ]"
+                                    >
+                                        {{ item.farmWorkName }}
+                                    </div>
+                                </el-menu-item>
+                            </el-menu>
+                        </div>
+                    </el-affix>
+                    <!-- <div class="export-btn">
+                        <div class="btn-item"><img src="@/assets/img/old_mini/export.png" />导出</div>
+                    </div> -->
+                    <div class="album-r">
+                        <div
+                            class="done-card section"
+                            v-for="(card, cardI) in farmWorkList"
+                            :key="cardI"
+                            :class="{ flashing: card.status === 1 && isFlashing }"
+                        >
+                            <div class="card-dom" :id="'section' + cardI"></div>
+                            <div v-if="card.status === 1" class="log-wrap">
+                                <div class="log-box">
+                                    <div class="log-title PangMenZhengDao-FONT">果园日志</div>
+                                    <div class="log-content">
+                                        <div class="log-desc">
+                                            这里是果园日志的内容,这里是果园日志的内容,这里是果园日志的内容,果园日志
+                                        </div>
+                                        <indicatorChart
+                                            :key="cardI + 'log'"
+                                            :indexName="card.indexName"
+                                            type="feature"
+                                            :chartData="card.indexChart"
+                                        ></indicatorChart>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="card-wrap" :class="{ noCarousel: card.status !== 0 }">
+                                <div
+                                    class="card-content"
+                                    :class="{ push: card.status === 1, hasBg: card.status === 2 && !card.hasBg }"
+                                >
+                                    <div
+                                        class="card-top"
+                                        @click="showDetail(card)"
+                                        :class="{ noChart: !card.indexChart.length }"
+                                    >
+                                        <div class="card-title serve-title">
+                                            <div class="title-name">{{ card.farmWorkName }}</div>
+                                            <div v-if="card.type === 1" class="status-tag standard">标准农事</div>
+                                            <div v-if="card.type === 2" class="status-tag advice">推荐农事</div>
+                                            <div v-if="card.type === 0" class="status-tag warning">预警农事</div>
+                                            <!-- 右上角角标 -->
+                                            <div v-if="card.status === 2 && card.execute === 0" class="add-btn">
+                                                未触发
+                                            </div>
+                                            <div
+                                                v-if="card.status === 2 && card.execute === 2"
+                                                class="add-btn unactive"
+                                            >
+                                                未激活
+                                            </div>
+                                            <div v-if="card.execute === 3" class="add-btn">待执行</div>
+                                            <div v-if="card.status === 0 && card.execute === 4" class="add-btn recheck">
+                                                已完成
+                                            </div>
+                                            <div v-if="card.status === 0 && card.reCheck === 1" class="add-btn recheck">
+                                                已复核
+                                            </div>
+                                            <div v-if="card.execute === 1" class="add-btn unactive">已失效</div>
+                                        </div>
+                                        <div class="card-desc">
+                                            <span class="desc-title">触发条件:</span>
+                                            {{ card.condition }}
+                                        </div>
+                                        <div class="card-desc">
+                                            <span class="desc-title">农事编号:</span>
+                                            {{ card.code }}
+                                        </div>
+                                        <div v-if="card.status === 2" class="card-desc">
+                                            <span class="desc-title">推荐时间:</span>
+                                            {{ card.solarName }}
+                                        </div>
+                                        <div v-if="card.status === 1" class="card-desc">
+                                            <span class="desc-title">推荐时间:</span>
+                                            {{ card.executeDate }}
+                                        </div>
+                                        <div v-if="card.status === 0" class="card-desc">
+                                            <span class="desc-title">{{
+                                                card.reCheck ? "复核时间:" : "执行时间:"
+                                            }}</span>
+                                            {{ card.executeDate }}
+                                        </div>
+                                        <div class="card-desc last-desc">
+                                            <span class="desc-title">药物处方:</span>
+                                            <div class="rescription-wrap">
+                                                <div class="rescription">
+                                                    <span
+                                                        v-for="(
+                                                            fertilizer, fertilizerI
+                                                        ) in card.pesticideFertilizerList"
+                                                        :key="fertilizerI"
+                                                    >
+                                                        {{ fertilizer.ratio ? fertilizer.ratio + "倍" : "" }}
+                                                        {{ fertilizer.name }}
+                                                        <span
+                                                            v-if="
+                                                                fertilizerI !== card.pesticideFertilizerList.length - 1
+                                                            "
+                                                        >
+                                                            +
+                                                        </span>
+                                                    </span>
+                                                </div>
+                                                <div class="detail-text">查看详情></div>
+                                            </div>
+                                        </div>
+                                        <div class="card-link">
+                                            <img src="@/assets/images/warningHome/expert-icon.png" />
+                                            <div class="expert-name">
+                                                {{ card.expertName
+                                                }}<el-icon size="12" class="icon"><ArrowRightBold /></el-icon>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <chart
+                                        v-if="card.status !== 2 && card.indexChart.length"
+                                        :key="cardI"
+                                        :indexName="card.indexName"
+                                        :type="card.status !== 1 ? 'normal' : 'feature'"
+                                        :chartData="card.indexChart"
+                                    ></chart>
+                                </div>
+                            </div>
+                            <div v-if="card.status !== 2" :class="['over-img']">
+                                <!-- 图片列表 -->
+                                <!-- <album-carousel7d
+                                    :sampleId="sampleId"
+                                    :farmId="farmId"
+                                    :farmWork="card"
+                                ></album-carousel7d> -->
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <detail-dailog></detail-dailog>
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref, computed, onUnmounted, nextTick, onActivated, onDeactivated } from "vue";
+import { useStore } from "vuex";
+import { useRoute, useRouter } from "vue-router";
+import eventBus from "@/api/eventBus";
+import chart from "./chart.vue";
+import indicatorChart from "./indicatorChart.vue";
+const store = useStore();
+import AlbumCarousel7d from "./album_compoents/albumCarousel7d";
+import detailDailog from "./album_compoents/detailDailog";
+import { SET_TOKEN } from "@/store/modules/app/type";
+
+const route = useRoute();
+// 监听页面滚动,更新当前激活的锚点
+const handleScroll = () => {
+    const scrollPosition = window.scrollY; // 加上头部偏移量
+    farmWorkList.value.forEach((_, index) => {
+        const section = document.getElementById(`section${index}`);
+        if (section && section.offsetTop <= scrollPosition) {
+            activeSection.value = index;
+        }
+    });
+};
+
+// 防抖函数
+function debounce(func, wait) {
+    let timeout;
+    return function (...args) {
+        const later = () => {
+            clearTimeout(timeout);
+            func.apply(this, args);
+        };
+        clearTimeout(timeout);
+        timeout = setTimeout(later, wait);
+    };
+}
+
+const debouncedHandleScroll = debounce(handleScroll, 100);
+// onMounted(() => {
+//     window.addEventListener("scroll", debouncedHandleScroll);
+//     // myPushChart = echarts.init(chartPushRef.value);
+//     // myPushChart.setOption(galleryLine);
+
+//     getFarmDetail(farmId);
+//     getFarmWorkList(farmId);
+// });
+
+let notShare = ref(true);
+const shareActiveIndex = ref(null);
+
+const sampleId = ref(route.query.sampleId);
+const farmId = ref(route.query.farmId);
+onMounted(() => {
+    sampleId.value = 766;
+    farmId.value = 88388;
+
+    getFarmDetail( farmId.value);
+    getFarmWorkList( farmId.value);
+    fetchData()
+    window.addEventListener("scroll", debouncedHandleScroll);
+});
+// onActivated(() => {
+//     sampleId.value = route.query.sampleId;
+//     farmId.value = route.query.farmId;
+//     window.addEventListener("scroll", debouncedHandleScroll);
+//     getFarmDetail(farmId.value);
+//     getFarmWorkList(farmId.value);
+// });
+// onDeactivated(() => {
+//     farmDetail.value = {};
+//     farmWorkList.value = [];
+//     window.removeEventListener("scroll", debouncedHandleScroll);
+// });
+
+// 移除滚动事件监听
+onUnmounted(() => {
+    window.removeEventListener("scroll", debouncedHandleScroll);
+});
+
+const fetchData = async () => {
+    try {
+    const farmItem = await fetch("/farmData/farmItem.json"); // 假设 JSON 文件放在 public 文件夹
+    const farmItemData = await farmItem.json();
+    console.log('farmItemData', farmItemData[88388])
+
+    const response = await fetch("/farmData/workList.json"); // 假设 JSON 文件放在 public 文件夹
+    const data = await response.json();
+    console.log('dddd', data)
+    // const foundItem = data.find((d) => d.id === Number(inputId.value));
+    // if (foundItem) {
+    //     item.value = foundItem;
+    //     error.value = "";
+    // } else {
+    //     item.value = null;
+    //     error.value = "Item not found!";
+    // }
+    } catch (err) {
+    console.error(err);
+    }
+};
+
+// 农场详情
+const farmDetail = ref({});
+const getFarmDetail = async (id) => {
+    const farmItem = await fetch("/farmData/farmItem.json"); // 假设 JSON 文件放在 public 文件夹
+    const farmItemData = await farmItem.json();
+    console.log('farmItemData', farmItemData[id])
+    farmDetail.value = farmItemData[id];
+};
+
+// 农事列表
+const farmWorkList = ref([]);
+const getFarmWorkList = async (farmId) => {
+    const response = await fetch("/farmData/workList.json"); // 假设 JSON 文件放在 public 文件夹
+    const data = await response.json();
+console.log('d----------', data[farmId])
+    getSecondLastIndex(data[farmId]);
+        // farmWorkList.value = data;
+        nextTick(() => {
+            initScrollToSection(secondLastIndex.value);
+        });
+        setTimeout(() => {
+            startFlashing();
+        }, 100);
+};
+
+const activeSection = ref(0);
+
+const scrollContainer = ref(null);
+// 点击左侧菜单项,滚动到对应内容
+const scrollToSection = (index) => {
+    //   const section = farmWorkList.value[index];
+    const sectionElement = document.getElementById(`section${index}`);
+    if (sectionElement) {
+        sectionElement.scrollIntoView({ behavior: "smooth" });
+        activeSection.value = index;
+        setTimeout(() => {
+            // 获取滚动容器的当前滚动位置
+            let scrollTop = scrollContainer.value.scrollTop;
+            scrollTop += 44; // 加多 44px,头部的高度
+            // 滚动至目标位置
+            scrollContainer.value.scrollTop = scrollTop;
+        }, 300);
+    }
+};
+
+// 点击左侧菜单项,滚动到对应内容
+const initScrollToSection = (index) => {
+    const menuElement = document.getElementById(`menu${index}`);
+    if (menuElement) {
+        menuElement.scrollIntoView({ behavior: "smooth" });
+        activeSection.value = index;
+        setTimeout(() => {
+            scrollToSection(index);
+        }, 0);
+    }
+};
+const secondLastIndex = ref(-1); // 初始化索引值
+const getSecondLastIndex = (data) => {
+    // 过滤出 status 为 2 的项
+    const filteredItems = data.filter((item) => item.status === 1);
+    // 获取倒数第二项
+    if (filteredItems.length >= 1) {
+        const secondLastItem = filteredItems[filteredItems.length - 1];
+        // 获取该项在原数组中的索引
+        secondLastIndex.value = data.indexOf(secondLastItem);
+
+        const lastTwoItems = filteredItems.slice(-1);
+        farmWorkList.value = data.map((item) => {
+            // 如果是最后两项之一,则添加 feature 属性
+            if (lastTwoItems.includes(item)) {
+                return { ...item, hasBg: true };
+            }
+            return item;
+        });
+    } else {
+        secondLastIndex.value = -1; // 如果没有足够的项,设置为 -1
+    }
+};
+
+const isFlashing = ref(false);
+const startFlashing = () => {
+    isFlashing.value = true;
+
+    // 使用 setTimeout 在一段时间后停止闪动
+    setTimeout(() => {
+        isFlashing.value = false;
+    }, 3000); // 3 秒后停止闪动
+};
+
+// 显示详情
+const showDetail = (card) => {
+    const pageParams = {
+        activeIndex: activeSection.value,
+        card,
+    };
+    eventBus.emit("detailDialog:showDialog", pageParams);
+};
+</script>
+
+<style lang="scss" scoped>
+.album-page {
+    position: relative;
+    width: 100%;
+    height: calc(100% - 30px);
+    overflow: hidden;
+    margin-top: 34px;
+    background: #232323;
+    border: 1px solid #666666;
+    border-radius: 4px;
+
+    .album-wrap {
+        width: 100%;
+        height: 100%;
+        .barrage-title {
+            height: 44px;
+            line-height: 44px;
+            text-align: center;
+            font-size: 17px;
+            font-weight: bold;
+            border-bottom: 1px solid rgba(255, 255, 255, 0.4);
+            width: 100%;
+            position: sticky;
+            background: #232323;
+            top: 0;
+            left: 0;
+            z-index: 9;
+            .title-icon {
+                cursor: pointer;
+                position: absolute;
+                left: 16px;
+                top: 13px;
+            }
+        }
+        .album-content {
+            height: calc(100% - 44px);
+            // overflow: auto;
+            // margin-top: 45px;
+            .album-top {
+                display: flex;
+                padding: 12px 10px 16px 10px;
+                width: 100%;
+                overflow: hidden;
+                box-sizing: border-box;
+                .album-img {
+                    img {
+                        width: 78px;
+                        height: 78px;
+                        object-fit: cover;
+                        border-radius: 6px;
+                    }
+                }
+                .garden-content {
+                    padding-left: 12px;
+                    display: flex;
+                    flex-direction: column;
+                    justify-content: center;
+                    .garden-name {
+                        font-weight: bold;
+                        font-size: 16px;
+                        color: #fff;
+                        display: flex;
+                        align-items: center;
+                        flex-wrap: wrap;
+                        .tag-wrap {
+                            display: flex;
+                            flex-wrap: wrap;
+                            flex: 1;
+                            margin-left: 6px;
+                        }
+                        .type-tag {
+                            margin-top: 2px;
+                            font-weight: normal;
+                            margin-left: 4px;
+                            padding: 0 6px;
+                            height: 21px;
+                            line-height: 21px;
+                            border-radius: 2px;
+                            border: 0.5px solid #FFD489;
+                            font-size: 12px;
+                            color: #FFD489;
+                        }
+                    }
+                    .garden-desc {
+                        padding-top: 4px;
+                        font-size: 13px;
+                        color: #9F9F9F;
+                    }
+                }
+            }
+            .album-camera {
+                width: 100%;
+                padding: 0 10px 10px;
+                box-sizing: border-box;
+                position: relative;
+                .tips-text {
+                    position: absolute;
+                    left: calc(50% + 20px);
+                    top: 8px;
+                    height: 17px;
+                    padding: 1px 5px 2px 8px;
+                    color: #fff;
+                    font-size: 12px;
+                    border-radius: 24px 20px 20px 0;
+                    line-height: 18px;
+                    background: linear-gradient(45deg, #00d4ff, #008eff);
+                }
+                img {
+                    width: 100%;
+                }
+            }
+            .album-bottom {
+                display: flex;
+                // height: calc(100% - 106px);
+                position: relative;
+                background: rgba(73, 73, 73, 0.3);
+                height: calc(100% - 105px);
+                overflow: auto;
+
+                .export-btn {
+                    position: fixed;
+                    z-index: 999;
+                    left: 0;
+                    bottom: 0px;
+                    height: 60px;
+                    padding-top: 10px;
+                    background: rgba(73, 73, 73, 0.3);
+                    .btn-item {
+                        font-size: 14px;
+                        color: #fff;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        background: linear-gradient(45deg, #00d4ff, #008eff);
+                        width: 98px;
+                        height: 36px;
+                    }
+                    img {
+                        width: 24px;
+                    }
+                }
+                .album-l {
+                    width: 98px;
+                    // height: calc(100vh - 114px);
+                    height: 100%;
+                    overflow: auto;
+                    background: rgba(73, 73, 73, 0.3);
+                    border-radius: 0 4px 4px 0;
+                    .menu-icon {
+                        width: 16px;
+                        margin-right: 4px;
+                    }
+                    .menu-name {
+                        max-width: 80px;
+                        white-space: nowrap;
+                        overflow: hidden;
+                        text-overflow: ellipsis;
+                    }
+                    ::v-deep {
+                        .el-menu {
+                            background: rgba(73, 73, 73, 0.3);
+                            border-right: 0;
+                            .el-menu-item {
+                                height: 32px;
+                                line-height: 32px;
+                                justify-content: center;
+                                color: #CECECE;
+                                margin: 10px 0;
+                                padding: 4px;
+                                &:hover {
+                                    background: transparent;
+                                }
+                                &.is-active {
+                                    background: transparent;
+                                    color: #CECECE;
+                                    .menu-name {
+                                        // color: #666666;
+                                    }
+                                }
+                                &.active {
+                                    background: #232323;
+                                    color: #F0AC37;
+                                    .menu-name {
+                                        color: #F0AC37;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    .noTime {
+                        // color: #cccccc;
+                    }
+                    .now {
+                        color: rgba(33, 153, 248, 1);
+                    }
+                    .onTime {
+                        color: rgba(255, 212, 137, 0.6);
+                    }
+                }
+                ::v-deep {
+                    .el-affix {
+                        background: rgba(73, 73, 73, 0.3);
+                        border-radius: 0 4px 4px 0;
+                        width: 98px !important;
+                        height: 100%;
+                        & > div {
+                            height: 100%;
+                        }
+                    }
+                }
+                .album-r {
+                    padding: 0 10px 34px 10px;
+                    flex: 1;
+                    background: #232323;
+                    height: 100%;
+                    overflow: auto;
+                    .common-btn {
+                        background: #F7BE5A;
+                        border-radius: 4px;
+                        color: #fff;
+                        padding: 8px 10px;
+                        text-align: center;
+                    }
+                    .card-wrap {
+                        // border: 1px solid #FFDA66;
+                        border-radius: 8px;
+                        // padding: 8px 8px;
+                        position: relative;
+                        z-index: 2;
+                        // margin-top: -20px;
+                        &.noCarousel {
+                            padding: 0;
+                            // margin-top: 12px;
+                            // padding-top: 10px;
+                            border: none;
+                            .card-top .card-link {
+                                top: 24px;
+                            }
+                        }
+                    }
+                    .card-content {
+                        background: rgba(105, 73, 13, 0.1);
+                        border-radius: 8px;
+                        padding: 0 8px 8px;
+                        border: 1px solid #FFDA66;
+                        &.push {
+                            padding: 0 8px 12px 8px;
+                            // margin-bottom: 8px;
+                            // border: 1px solid rgba(102, 102, 102, 0.38);
+                        }
+                        &.hasBg {
+                            padding: 0 8px 12px 8px;
+                            background: #232323;
+                            border: 1px solid rgba(102, 102, 102, 0.38);
+                            .card-top {
+                                border-bottom: none;
+                                padding-bottom: 0;
+                            }
+                        }
+                        .card-top {
+                            cursor: pointer;
+                            padding-bottom: 12px;
+                            border-bottom: 1px solid rgba(255, 238, 208, 0.4);
+                            position: relative;
+                            &.noChart {
+                                border-bottom: 0;
+                                padding-bottom: 0;
+                            }
+                            .card-title {
+                                display: flex;
+                                align-items: center;
+                                padding-bottom: 8px;
+                                .serve-btn {
+                                    padding: 3px 10px;
+                                    background: #F7BE5A;
+                                    border-radius: 22px;
+                                    color: #fff;
+                                    text-align: center;
+                                }
+                                .title-name {
+                                    color: #fff;
+                                    font-size: 16px;
+                                    padding-right: 8px;
+                                    font-weight: 600;
+                                }
+                                img {
+                                    width: 24px;
+                                }
+
+                                .status-tag {
+                                    color: #f3a302;
+                                    font-size: 12px;
+                                    padding: 2px 6px;
+                                    border-radius: 2px;
+                                    border: 0.2px solid transparent;
+                                    &.blue {
+                                        color: #F7BE5A;
+                                        background: rgba(33, 153, 248, 0.2);
+                                    }
+                                    &.good-wrap {
+                                        margin-left: 4px;
+                                        display: flex;
+                                        align-items: center;
+                                        .good {
+                                            margin-left: 3px;
+                                            width: 13px;
+                                        }
+                                    }
+                                    &.standard {
+                                        color: #F7BE5A;
+                                        border-color: #FFD489
+                                    }
+                                    &.advice {
+                                        color: rgba(252, 167, 3, 0.9);
+                                        background: rgba(255, 220, 104, 0.38);
+                                    }
+                                    &.warning {
+                                        color: #ff4221;
+                                        background: rgba(255, 175, 160, 0.24);
+                                    }
+                                }
+                                &.serve-title {
+                                    padding: 12px 0 8px 0;
+                                    display: flex;
+                                    align-items: center;
+                                    position: relative;
+                                    .add-btn {
+                                        position: absolute;
+                                        right: -8px;
+                                        top: 0;
+                                        background: #F7BE5A;
+                                        color: #fff;
+                                        font-size: 12px;
+                                        border-radius: 0 8px 0 8px;
+                                        padding: 1px 6px;
+                                        &.unactive {
+                                            background: #494949;
+                                            color: #9F9F9F;
+                                        }
+                                    }
+                                    .tag {
+                                        display: flex;
+                                        align-items: center;
+                                        color: #ff7000;
+                                        font-size: 10px;
+                                        .desc {
+                                            position: relative;
+                                            left: -4px;
+                                        }
+                                        .photo-grid {
+                                            display: flex;
+                                            .photo {
+                                                position: relative;
+                                                img {
+                                                    width: 18px; /* 示例宽度,你可以根据需要调整 */
+                                                    height: 18px;
+                                                    object-fit: cover;
+                                                    border-radius: 50%;
+                                                    display: block; /* 去除图片底部的空白间隙 */
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                            .card-desc {
+                                color: #9F9F9F;
+                                font-size: 12px;
+                                line-height: 18.2px;
+                                .desc-title {
+                                    color: #494949;
+                                }
+                                .rescription-wrap {
+                                    display: flex;
+                                    align-items: center;
+                                    .detail-text {
+                                        color: #F7BE5A;
+                                        padding-left: 6px;
+                                    }
+                                }
+                                .rescription {
+                                    max-width: 100px;
+                                    white-space: nowrap;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                }
+                            }
+                            .card-link {
+                                display: flex;
+                                flex-direction: column;
+                                align-items: center;
+                                justify-content: center;
+                                color: #A46700;
+                                font-size: 12px;
+                                position: absolute;
+                                right: 6px;
+                                top: 20px;
+                                .expert-name {
+                                    background: #FFD489;
+                                    border-radius: 4px;
+                                    padding: 2px 6px 3px 10px;
+                                    margin-top: 4px;
+                                    display: flex;
+                                    align-items: center;
+                                }
+                                img {
+                                    width: 64px;
+                                }
+                                .icon {
+                                    padding-right: 2px;
+                                }
+                            }
+                        }
+                        .card-chart {
+                            padding: 8px 4px 0 4px;
+                            height: 130px;
+                        }
+                    }
+
+                    .done-card {
+                        margin-bottom: 14px;
+                    }
+                    .card-dom {
+                        position: relative;
+                        top: -50px;
+                    }
+
+                    .over-img {
+                        transition: all 0.2s ease-in-out;
+                        position: relative;
+                        z-index: 3;
+                        ::v-deep {
+                            img {
+                                border-radius: 8px;
+                            }
+                        }
+                    }
+                    .log-wrap {
+                        padding: 4px 0 10px 0;
+                        .log-box {
+                            // background: #fff8e0;
+                            border-radius: 8px;
+                            border: 0.5px solid #FFD489;
+                            .log-title {
+                                position: relative;
+                                top: -4px;
+                                background: url("@/assets/images/warningHome/log-bg.png") no-repeat top center / cover;
+                                width: 74px;
+                                height: 32px;
+                                line-height: 26px;
+                                text-align: center;
+                                font-size: 14px;
+                                color: #fff;
+                            }
+                            .log-content {
+                                padding-bottom: 10px;
+                                color: #FFD489;
+                                .log-desc {
+                                    padding: 0 10px;
+                                    font-size: 12px;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            .flashing {
+                position: relative;
+                &::after {
+                    content: "";
+                    position: absolute;
+                    top: 0;
+                    left: -2px;
+                    width: 100%;
+                    height: calc(100% - 2px);
+                    border: 2px solid rgba(255, 238, 208, 0.1);
+                    animation: flash 0.4s infinite alternate;
+                    border-radius: 8px;
+                    pointer-events: none;
+                }
+            }
+
+            @keyframes flash {
+                0% {
+                    box-shadow: 0 0 5px #F7BE5A;
+                    border-color: #F7BE5A;
+                }
+                100% {
+                    box-shadow: 0 0 20px #F7BE5A;
+                    border: 2px solid #F7BE5A;
+                }
+            }
+        }
+
+        .farm-icon {
+            position: fixed;
+            bottom: 100px;
+            left: 120px;
+            width: 183px;
+            height: 45px;
+            z-index: 10;
+        }
+    }
+}
+</style>

+ 49 - 0
src/views/warningHome/components/album_compoents/albumCarousel.vue

@@ -0,0 +1,49 @@
+<template>
+    <album-carousel-item v-if="images" :images="images"></album-carousel-item>
+</template>
+
+<script setup>
+import { ref, computed, onMounted, onUnmounted } from "vue";
+import AlbumDrawBoxItem from "./albumCarouselItem";
+import "./cacheImg.js"
+import AlbumCarouselItem from "./albumCarouselItem";
+import {dateFormat} from "@/utils/date_util.js"
+
+const props =defineProps({
+  sampleId:{
+    type: [Number, String],
+    required: false
+  },
+  farmId:{
+    type: [Number, String],
+    required: true
+  },
+  farmWork:{
+    type: Object,
+    required: false
+  }
+})
+const images = ref(null);
+
+onMounted(() => {
+  let params = {sampleId: props.sampleId,farmId: props.farmId}
+  if(props.farmWork?.executeDate){
+    let execcuteDate = new Date(props.farmWork.executeDate)
+    let beforeExecuteDate = new Date(props.farmWork.beforeExecuteDate)
+    const pastDate = new Date(beforeExecuteDate);
+    const futureDate = new Date(execcuteDate);
+    params.startDate = dateFormat(pastDate, "YY-mm-dd");
+    params.endDate = dateFormat(futureDate, "YY-mm-dd");
+  }
+  VE_API.image.list(params).then(res => {
+    if(res.code === 0){
+      images.value = res.data
+    }
+  })
+});
+
+</script>
+
+<style lang="scss" scoped>
+@import "src/styles/index";
+</style>

+ 91 - 0
src/views/warningHome/components/album_compoents/albumCarousel7d.vue

@@ -0,0 +1,91 @@
+<template>
+  <template v-for="(images,index) in imagesList" :key="index">
+    <album-carousel-item  :images="images"></album-carousel-item>
+    <div style="height: 5px"></div>
+  </template>
+</template>
+
+<script setup>
+import { ref, computed, onMounted, onUnmounted } from "vue";
+import AlbumDrawBoxItem from "./albumCarouselItem";
+import "./cacheImg.js"
+import AlbumCarouselItem from "./albumCarouselItem";
+import {dateFormat} from "@/utils/date_util.js"
+
+const props =defineProps({
+  sampleId:{
+    type: [Number, String],
+    required: false
+  },
+  farmId:{
+    type: [Number, String],
+    required: true
+  },
+  farmWork:{
+    type: Object,
+    required: false
+  }
+})
+const imagesList = ref([]);
+
+onMounted(() => {
+  let params = {sampleId: props.sampleId,farmId: props.farmId}
+  if(props.farmWork?.executeDate){
+    let execcuteDate = new Date(props.farmWork.executeDate)
+    let beforeExecuteDate = new Date(props.farmWork.beforeExecuteDate)
+    const pastDate = new Date(beforeExecuteDate);
+    const futureDate = new Date(execcuteDate);
+    params.startDate = dateFormat(pastDate, "YY-mm-dd");
+    params.endDate = dateFormat(futureDate, "YY-mm-dd");
+  }
+  VE_API.image.list(params).then(res => {
+    if(res.code === 0){
+      let result = splitByWeek(res.data, params.startDate, params.endDate);
+      if(result && result.length > 0){
+        result = result.reverse()
+      }
+      for(let i=0;result != null && i<result.length;i++){
+        if (result[i] && result[i].length > 0){
+          imagesList.value.push(result[i])
+        }
+      }
+    }
+  })
+});
+
+function splitByWeek(items, startDate, endDate) {
+  // 将开始时间和结束时间转换为时间戳
+  const start = new Date(startDate).getTime();
+  const end = new Date(endDate).getTime();
+
+  // 创建一个用于存储按周分组的结果
+  const weeklyGroups = [];
+
+  // 遍历每一项
+  items.forEach(item => {
+    const uploadDate = new Date(item.uploadDate).getTime();
+
+    // 确保上传日期在开始日期和结束日期之间
+    if (uploadDate >= start && uploadDate <= end) {
+      // 计算上传日期属于第几周
+      const weekIndex = Math.floor((uploadDate - start) / (7 * 24 * 60 * 60 * 1000));
+
+      // 如果该周的数组不存在,则创建一个
+      if (!weeklyGroups[weekIndex]) {
+        weeklyGroups[weekIndex] = [];
+      }
+
+      // 将当前项添加到对应的周数组中
+      weeklyGroups[weekIndex].push(item);
+    }
+  });
+
+  return weeklyGroups;
+}
+
+
+</script>
+
+<style lang="scss" scoped>
+@import "src/styles/index";
+</style>

+ 190 - 0
src/views/warningHome/components/album_compoents/albumCarouselItem.vue

@@ -0,0 +1,190 @@
+<template>
+  <div class="carousel-container">
+    <!-- 图片列表 -->
+    <div class="carousel-wrapper"  :style="carouselStyle">
+      <photo-provider v-if="images" :photo-closable="true" @visibleChange="handleVisibleChange">
+        <template  v-for="(photo, index) in images"
+                   :key="photo.id">
+          <album-draw-box  :photo="photo" :current="currentIndex" :index="index" :length="images.length"
+          ></album-draw-box>
+        </template>
+      </photo-provider>
+    </div>
+    <div class="blur-bg" v-if="currentIndex !== 0">
+      <div class="blur-content">
+        <div class="blur-img">
+          <img src="@/assets/images/warningHome/camera-icon.png" />
+        </div>
+      </div>
+    </div>
+
+    <!-- 左右箭头 -->
+    <div @click.stop="prev" v-if="currentIndex !== 0" class="arrow left-arrow">
+      <el-icon color="#F0D09C"><ArrowLeftBold /></el-icon>
+    </div>
+    <div
+      @click.stop="next"
+      v-if="images && currentIndex !== images.length - 1"
+      class="arrow right-arrow"
+    >
+      <el-icon color="#F0D09C"><ArrowRightBold /></el-icon>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { toRefs, ref, computed, onMounted, onUnmounted } from "vue";
+import AlbumDrawBox from "./albumDrawBox";
+import "./cacheImg.js"
+const props =defineProps({
+  images:{
+    type: Array,
+    required: true
+  }
+})
+const {images} = toRefs(props);
+let timer = null;
+const currentIndex = ref(0);
+
+onMounted(() => {
+  updateImagePosition();
+  clearAndRestartTimer();
+});
+onUnmounted(() => {
+  clearInterval(timer);
+});
+
+const updateImagePosition = () => {
+  carouselStyle.value.transform = `translateX(-${currentIndex.value * 100}%)`;
+};
+
+const clickPhotoShow = () => {
+  if (timer) {
+    clearInterval(timer)
+  };
+}
+
+// 图片显隐切换回调
+const handleVisibleChange = ({visible}) => {
+  if (visible.value) {
+    if (timer) {
+      clearInterval(timer)
+    }
+  } else {
+    clearAndRestartTimer();
+  }
+}
+
+// 计算轮播图样式
+const carouselStyle = computed(() => {
+  return {
+    transform: `translateX(-${currentIndex.value * 100}%)`,
+  };
+});
+
+// 下一张图片
+const next = () => {
+  // 图片总数
+  const totalImages = images.value.length;
+  currentIndex.value = (currentIndex.value + 1) % totalImages;
+  updateImagePosition();
+  clearAndRestartTimer();
+};
+
+// 上一张图片
+const prev = () => {
+  // 图片总数
+  const totalImages = images.value.length;
+  currentIndex.value = (currentIndex.value - 1 + totalImages) % totalImages;
+  updateImagePosition();
+  clearAndRestartTimer();
+};
+
+const clearAndRestartTimer = () => {
+  if (timer) {
+    clearInterval(timer);
+  }
+  // timer = setInterval(next, 5000);
+};
+
+
+</script>
+
+<style lang="scss" scoped>
+@import "src/styles/index";
+.carousel-container {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+  margin: 0 auto;
+  .carousel-wrapper {
+    display: flex;
+    transition: transform 0.5s ease;
+    width: 100%;
+  }
+  .blur-bg {
+    position: absolute;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    backdrop-filter: blur(1.4px);
+    .blur-content {
+      border-radius: 8px;
+      background: rgba(0, 0, 0, 0.5);
+      width: 100%;
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      font-size: 12px;
+      color: #fff;
+      .blur-img {
+        img {
+          width: 54px;
+          position: relative;
+          left: 4px;
+          top: 4px;
+        }
+      }
+      .blur-text {
+        padding: 8px 0;
+        text-align: center;
+        line-height: 1.5;
+      }
+      .blur-btn {
+        padding: 0 40px;
+        box-shadow: 0 -2px 2px #86C9FF;
+        height: 28px;
+        line-height: 28px;
+        border-radius: 50px;
+        background: rgba(33, 153, 248, 0.7);
+        // background: linear-gradient(#86C9FF, rgba(255, 255, 255, 0));
+      }
+    }
+  }
+
+  .arrow {
+    position: absolute;
+    top: 50%;
+    transform: translateY(-50%);
+    background: rgba(0, 0, 0, 0.5);
+    width: rpx(72);
+    height: rpx(72);
+    border-radius: 50%;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+    pointer-events: all;
+  }
+
+  .left-arrow {
+    left: rpx(32);
+  }
+
+  .right-arrow {
+    right: rpx(32);
+  }
+}
+</style>

+ 278 - 0
src/views/warningHome/components/album_compoents/albumDrawBox.vue

@@ -0,0 +1,278 @@
+<template>
+  <photo-consumer
+      class="carousel-item"
+      :src="watermark || base_img_url2 + photo.filename + resize"
+  >
+    <img v-if="Math.abs(current - index) < 3" crossorigin="anonymous" @load="drawWatermark($event,photo.markText)" loading="lazy" :src="watermark || (base_img_url2 + (photo.resFilename ? photo.resFilename : photo.filename) + resize)" style="width: 100%;" />
+    <canvas  ref="canvasRef" style="position: absolute;"></canvas>
+    <div class="tag-text" v-if="showTagBox" >
+      <span v-html="photo.growText"></span>
+      <button class="close-button" @click="hideTagBox">✖</button>
+    </div>
+    <div class="tag-box right" :class="{'leftTop': 'leftTop'}">{{ index+1 }}/{{ length }}</div>
+<!--    <div class="center-mark">mark</div>-->
+  </photo-consumer>
+
+</template>
+
+<script setup>
+import { ref, onMounted, onBeforeUnmount, defineProps } from "vue";
+import { base_img_url2 } from "@/api/config";
+import {imageCache} from "./cacheImg.js"
+import {dateFormat} from "@/utils/date_util.js"
+const resize = "?x-oss-process=image/resize,p_80/format,webp/quality,q_40";
+
+const canvasRef = ref(null);
+const watermark = ref(null)
+
+const props = defineProps({
+  photo:{
+    type: Object,
+    required: true
+  },
+  index:{
+    type: Number,
+    required: true
+  },
+  length:{
+    type: Number,
+    required: true
+  },
+  current:{
+    type: Number,
+    required: true
+  }
+})
+
+function drawWatermark(event, markText) {
+  // console.log("markText:"+markText)
+  if(!watermark.value && markText){
+    let obj = JSON.parse(markText)
+    const img = event.target;
+    const canvas = canvasRef.value;
+    let scale = 3
+    canvas.width = img.width * scale;
+    canvas.height = img.height * scale;
+    const ctx = canvas.getContext('2d');
+    ctx.scale(scale, scale)
+    ctx.drawImage(img, 0, 0, img.width, img.height);
+    drawBottom(ctx, img.width, img.height)
+    watermark.value = canvas.toDataURL();
+  }
+}
+
+let data = {year:props.photo.uploadDate.substring(0,4),
+  monthDay:dateFormat(new Date(props.photo.uploadDate),'mm/dd'),
+  address:props.photo.district.replaceAll("\"","") + props.photo.gardenName,
+  tempImg:imageCache.get("temp"),temp:"20°C",
+  feiniao:imageCache.get("feiniao"),
+  fusheImg:imageCache.get("fushe"),fushe:"光照优",
+  shiduImg:imageCache.get("shidu"),shidu:"湿度适宜",
+  shotCode:props.photo.shotCode
+}
+// console.log(data)
+const drawBottom = (ctx, imgWidth, imgHeight) => {
+  // 设置遮罩的高度为imgHeight的1/6
+  const maskHeight = imgHeight / 4;
+
+  // 绘制黑色半透明遮罩
+  ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; // 黑色,50%透明度
+  ctx.fillRect(0, imgHeight - maskHeight, imgWidth, maskHeight);
+
+  // 设置文本样式
+  ctx.fillStyle = "white"; // 文本颜色为白色
+  ctx.font = "8px Arial";
+  ctx.textAlign = "left"; // 设置为左对齐
+
+  // 从遮罩的底部开始绘制文本
+  let currentY = imgHeight - maskHeight + 10; // 字段的起始Y坐标
+  let currentX = 10; // 字段的起始X坐标
+
+  // 绘制年份
+  const field1 = `${data.year}`;
+  ctx.fillText(field1, currentX, currentY+10);
+  currentY += 5;
+  // 计算下划线的起始和结束坐标
+  const underlineY = currentY + 10; // 下划线Y坐标稍微低于文本
+  const underlineWidth = ctx.measureText(field1).width; // 下划线的宽度与文本一致
+  ctx.strokeStyle = "white"; // 下划线颜色为白色
+  ctx.lineWidth = 1; // 下划线的宽度
+  ctx.beginPath();
+  ctx.moveTo(currentX, underlineY); // 下划线起始点
+  ctx.lineTo(currentX + underlineWidth, underlineY); // 下划线结束点
+  ctx.stroke(); // 绘制下划线
+
+  // 绘制日期
+  currentY += 20;
+  currentX += -3
+  ctx.fillStyle = "white"; // 文本颜色为白色
+  ctx.font = "20px Arial";
+  ctx.textAlign = "left"; // 设置为左对齐
+  const field2 = `${data.monthDay}`;
+  ctx.fillText(field2, currentX, currentY + 10);
+
+  // 绘制一个圆点
+  currentX += 60
+  ctx.beginPath();
+  ctx.arc(currentX, imgHeight - maskHeight + (maskHeight / 2 + 1), 2, 0, Math.PI * 2); // 绘制圆形
+  ctx.fill(); // 填充圆形
+
+  // 绘制地址
+  currentY += -10;
+  currentX += 10
+  ctx.font = "8px Arial";
+  const field3 = `${data.address}`;
+  ctx.fillText(field3, currentX, currentY );
+
+  // 绘制温度
+  currentY += 8;
+  currentX += -6
+  ctx.drawImage(data.tempImg, currentX + 2, currentY + 1, 13, 13);
+  const field4 = `${data.temp}`;
+  currentX += 15
+  currentY += 12
+  ctx.fillText(field4, currentX, currentY);
+
+  // 绘制湿度
+  currentX += 20
+  currentY += -12
+  ctx.drawImage(data.shiduImg, currentX +2, currentY + 1, 13, 13);
+  currentX += 16
+  currentY += 12
+  ctx.font = "8px Arial";
+  const field5 = `${data.shidu}`;
+  ctx.fillText(field5, currentX, currentY);
+
+  // 绘制辐射
+  currentX += 32
+  currentY += -12
+  ctx.drawImage(data.fusheImg, currentX + 2, currentY + 1, 13, 13);
+  currentX += 16
+  currentY += 12
+  ctx.font = "8px Arial";
+  const field6 = `${data.fushe}`;
+  ctx.fillText(field6, currentX, currentY);
+
+  // 绘制文本信息
+  currentX =imgWidth - 40;
+  currentY =imgHeight - 40;
+  ctx.drawImage(data.feiniao, currentX, currentY, 25, 25);
+  ctx.fillText(data.shotCode, currentX - 10, currentY + 35);
+}
+
+//绘制文字
+const drawText = (ctx, textObject) => {
+  const { x, y, text, color } = textObject;
+  ctx.fillStyle = `rgb(${color[0]}, ${color[1]}, ${color[2]})`;
+  ctx.font = 'normal 12px sans-serif';
+  const textHeight = parseInt(ctx.font, 10); // 获取字体大小计算文本的实际高度
+  ctx.fillText(text, x, y + textHeight); // 将y调整为y + textHeight  // 在指定位置(左上角)绘制文本
+};
+
+const showTagBox = ref(true); // 控制 tag-box 的显示状态
+const hideTagBox = (event) => {
+  event.stopPropagation();
+  showTagBox.value = false; // 隐藏 tag-box
+};
+
+
+</script>
+
+<style lang="scss" scoped>
+.canvas-container {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+}
+.carousel-item {
+  min-width: 100%;
+  flex-shrink: 0;
+  width: 100%;
+  pointer-events: auto;
+  position: relative;
+  .tag-box {
+    position: absolute;
+    bottom: 30%;
+    left: 50%;
+    transform: translate(-50%, 50%); // 确保在高二分之一的位置水平居中
+    height: 18px;
+    padding: 0 6px;
+    background: rgba(108, 108, 108, 0.67);
+    border-radius: 10px;
+    display: flex;
+    align-items: center;
+    color: #FFFFFF;
+    font-size: 12px;
+
+    &.right {
+      left: auto;
+      right: 10px;
+    }
+    &.leftTop {
+      height: 25px;
+      line-height: 26px;
+      padding: 0 8px;
+      border-radius: 16px;
+      background: rgba(0, 0, 0, 0.6);
+      bottom: auto;
+      top: 6px;
+    }
+  }
+  .tag-text {
+    position: absolute;
+    bottom: 31%;
+    left: 50%;
+    width: 80%;
+    transform: translate(-50%, 50%); // 确保在高二分之一的位置水平居中
+    height: 24px;
+    padding: 10px 0px 10px 0px;
+    background: rgba(0, 0, 0, 0.67);
+    border-radius: 6px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    text-align: center;
+    color: #FFFFFF;
+    font-size: 12px;
+  }
+
+  .center-mark {
+    position: absolute;
+    bottom: 10px;
+    left: 50%;
+    transform: translateX(-50%);
+    color: #36402c;
+    font-size: rpx(24);
+    font-weight: bold;
+    padding: rpx(14) rpx(30);
+    background: linear-gradient(
+            90deg,
+            rgba(255, 255, 255, 0) 0%,
+            rgba(255, 255, 255, 0.6) 24%,
+            rgba(255, 255, 255, 0.6) 76%,
+            rgba(255, 255, 255, 0) 100%
+    );
+  }
+}
+.carousel-item img {
+  width: 100%;
+  display: block;
+}
+canvas {
+  position: absolute;
+}
+.close-button {
+  background: transparent;
+  border: none;
+  color: #FFFFFF;
+  cursor: pointer;
+  font-size: 10px; // 可以根据需求调整大小
+  position: absolute;
+  top: -1px;
+  right: -9px; // 调整为合适的间距
+  transform: translateY(-50%);
+}
+
+
+</style>

+ 64 - 0
src/views/warningHome/components/album_compoents/cacheImg.js

@@ -0,0 +1,64 @@
+// 创建一个全局的图片缓存
+const imageCache = new Map();
+
+function loadImage(url, key) {
+    return new Promise((resolve, reject) => {
+        // 检查缓存中是否存在该key的图片
+        if (imageCache.has(key)) {
+            resolve(imageCache.get(key));
+            return;
+        }
+
+        // 如果缓存中没有,则创建一个新的图片对象
+        const img = new Image();
+        img.src = url;
+
+        img.onload = () => {
+            // 图片加载完成后,将其存入缓存
+            imageCache.set(key, img);
+            resolve(img);
+        };
+
+        img.onerror = (error) => {
+            reject(error);
+        };
+    });
+}
+
+// 使用示例
+loadImage(require('@/assets/images/warningHome/watermark/feiniao.png'), 'feiniao')
+    .then((img) => {
+        // 在这里使用加载完成的图片
+        // console.log('图片加载成功', img);
+    })
+    .catch((error) => {
+        console.error('图片加载失败', error);
+    });
+loadImage(require('@/assets/images/warningHome/watermark/fushe.png'), 'fushe')
+    .then((img) => {
+        // 在这里使用加载完成的图片
+        // console.log('图片加载成功', img);
+    })
+    .catch((error) => {
+        console.error('图片加载失败', error);
+    });
+loadImage(require('@/assets/images/warningHome/watermark/shidu.png'), 'shidu')
+    .then((img) => {
+        // 在这里使用加载完成的图片
+        // console.log('图片加载成功', img);
+    })
+    .catch((error) => {
+        console.error('图片加载失败', error);
+    });
+loadImage(require('@/assets/images/warningHome/watermark/temp.png'), 'temp')
+    .then((img) => {
+        // 在这里使用加载完成的图片
+        // console.log('图片加载成功', img);
+    })
+    .catch((error) => {
+        console.error('图片加载失败', error);
+    });
+
+export { imageCache };
+
+

+ 261 - 0
src/views/warningHome/components/album_compoents/detailDailog.vue

@@ -0,0 +1,261 @@
+<template>
+    <el-dialog v-model="winDialogVisible" lock-scroll modal-class="album-detail-modal" :showClose="false" width="400px" align-center>
+        <div>
+            <div class="congratulation-wrap">
+                <div class="congratulation-box">
+                    <div class="win-des">
+                        <!-- <img src="@/assets/img/weather_index/box-top.png" class="win-icon" /> -->
+                    </div>
+                    <div class="album-detail-box">
+                        <div class="detail-title">{{ dialogData.farmWorkName }}</div>
+                        <div class="detail-desc-box">
+                            <div class="desc-item">
+                                <span class="item-name">触发条件</span>
+                                {{ dialogData.condition }}
+                            </div>
+                            <div class="desc-item">
+                                <span class="item-name">农事编号</span>
+                                {{ dialogData.code }}
+                            </div>
+                            <div class="desc-item">
+                                <div v-if="dialogData.status === 2">
+                                    <span class="item-name">推荐时间</span>
+                                    {{ dialogData.solarName }}
+                                </div>
+                                <div v-if="dialogData.status === 1">
+                                    <span class="item-name">推荐时间</span>
+                                    {{ dialogData.executeDate }}
+                                </div>
+                                
+                                <div v-if="dialogData.status === 0">
+                                    <span class="item-name">{{ dialogData.reCheck ? "复核时间" : "执行时间" }}</span>
+                                    {{ dialogData.executeDate }}
+                                </div>
+                                <!-- <span class="item-name">{{ dialogData.status === 0 ? (dialogData.reCheck ? "复核农事" : "完成农事") : "推荐时间" }}</span>
+                                {{ dialogData.code }} -->
+                            </div>
+                            <div class="desc-item">
+                                <span class="item-name">农事宗旨</span>
+                                {{ dialogData.purpose }}
+                            </div>
+                            <div class="desc-item">
+                                <div class="item-name">药物处方</div>
+                                <div class="item-table">
+                                    <el-table :data="dialogData.pesticideFertilizerList" style="width: 100%" :header-cell-style="{background: '#F5F5F5'}">
+                                        <el-table-column prop="pesticideFertilizerCode" label="功效" width="62">
+                                            <template #default="scope">
+                                                {{scope.row.typeName}}
+                                            </template>
+                                        </el-table-column>
+                                        <el-table-column prop="name" label="名称" />
+                                        <!-- <el-table-column prop="ratio" label="配比" width="50">
+                                            <template #default="scope">
+                                                {{scope.row.ratio ? scope.row.ratio : "--"}}
+                                            </template>
+                                        </el-table-column> -->
+                                        <el-table-column prop="ratio" label="方式" width="62">
+                                            <template #default="scope">
+                                                {{scope.row.ratio ? "人工" : "人工"}}
+                                            </template>
+                                        </el-table-column>
+                                    </el-table>
+                                </div>
+                            </div>
+
+                            <div class="card-link">
+                                <img src="@/assets/images/warningHome/expert-icon.png" />
+                                <div class="expert-name">
+                                    {{ dialogData.expertName }}
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="close-btn" @click="winDialogVisible=false">
+                    <el-icon size="32" color="#fff"><CircleCloseFilled /></el-icon>
+                    <!-- <el-button type="primary" class="one-btn" @click="toShare"> 立即分享 </el-button> -->
+            </div>
+        </div>
+        <template #footer>
+            <div class="dialog-footer">
+                <div class="close-btn">
+                    <!-- <el-icon size="32" color="#fff"><CircleCloseFilled /></el-icon> -->
+                    <!-- <el-button type="primary" class="one-btn" @click="toShare"> 立即分享 </el-button> -->
+                </div>
+            </div>
+        </template>
+    </el-dialog>
+</template>
+<script setup>
+import { ref } from "vue";
+import eventBus from "@/api/eventBus";
+import { useRoute, useRouter } from "vue-router";
+
+const winDialogVisible = ref(false);
+
+const route = useRoute();
+const sampleId = route.query.sampleId
+const farmId = route.query.farmId;
+
+const dialogData = ref({});
+const currentCard = ref({});
+const showDialog = (pageParams) => {
+    dialogData.value = pageParams.card;
+    currentCard.value = {
+        activeIndex: pageParams.activeIndex,
+        farmWorkName: dialogData.value.farmWorkName,
+        farmId: farmId,
+        sampleId: sampleId,
+    };
+    winDialogVisible.value = true;
+};
+eventBus.on("detailDialog:showDialog", (data) => {
+    showDialog(data)
+});
+</script>
+
+<style lang="less" scoped>
+.congratulation-wrap {
+    border-radius: 12px;
+    background: #f4f5f4;
+}
+.close-btn {
+    text-align: center;
+    margin-top: 20px;
+}
+.congratulation-box {
+    border-radius: 12px;
+    background: url("@/assets/images/warningHome/box-top.png") no-repeat top center /contain;
+    .el-message-box__message {
+        padding: 12px 0 24px 0;
+    }
+    .win-title {
+        color: #1d1e1f;
+        font-family: "PangMenZhengDao", sans-serif; /* 使用自定义字体 */
+        text-align: center;
+        font-size: 24px;
+        line-height: 32px;
+    }
+    .win-detail {
+        text-align: center;
+        color: #252525;
+        padding-top: 6px;
+        font-size: 16px;
+        span {
+            font-size: 22px;
+            color: #2199f8;
+            padding: 0 6px;
+            font-weight: bold;
+        }
+    }
+    .win-des {
+        height: 205px;
+        text-align: center;
+    }
+    .win-icon {
+        width: 100%;
+        border-radius: 12px 12px 0 0;
+    }
+}
+.album-detail-box {
+    padding: 0 24px 16px 12px;
+    color: #000;
+    position: relative;
+    // top: -58px;
+    .detail-title {
+        font-size: 24px;
+        font-weight: bold;
+        padding-bottom: 8px;
+        letter-spacing: 1.6px;
+    }
+    .detail-desc-box {
+        position: relative;
+        .desc-item {
+            font-size: 14px;
+            .item-name {
+                color: #999999;
+                margin-right: 12px;
+            }
+            .item-table {
+                margin-top: 8px;
+                border: 1px solid rgba(255, 255, 255, 0.6);
+                border-radius: 4px;
+                ::v-deep {
+                    .el-table th.el-table__cell {
+                        padding: 6px 0;
+                    }
+                    .el-table--default .el-table__cell {
+                        padding: 6px 0;
+                    }
+                    .el-table--default .cell {
+                        padding: 0px 6px;
+                    }
+                }
+            }
+        }
+        .desc-item + .desc-item {
+            padding-top: 8px;
+        }
+        .card-link {
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+            color: #2199f8;
+            font-size: 12px;
+            position: absolute;
+            right: 6px;
+            top: 0px;
+            .expert-name {
+                background: #d3e8ff;
+                border-radius: 4px;
+                padding: 1px 12px;
+                margin-top: 4px;
+                display: flex;
+                align-items: center;
+            }
+            img {
+                width: 62px;
+            }
+            .icon {
+                padding-right: 2px;
+            }
+        }
+    }
+}
+.dialog-footer {
+    position: relative;
+    .close-btn {
+        position: absolute;
+        bottom: -58px;
+        left: 0;
+        right: 0;
+        margin: 0 auto;
+        text-align: center;
+    }
+}
+</style>
+
+<style lang="less">
+.album-detail-modal {
+    .el-overlay-dialog {
+        .el-dialog {
+            padding: 0;
+            border-radius: 12px;
+            background: none;
+            box-shadow: none;
+            .el-dialog__header {
+                padding: 0;
+            }
+        }
+
+        .one-btn {
+            width: 210px;
+            height: 40px;
+            line-height: 40px;
+        }
+    }
+}
+</style>

File diff suppressed because it is too large
+ 83 - 0
src/views/warningHome/components/chart.vue


+ 253 - 0
src/views/warningHome/components/chartSeting.js

@@ -0,0 +1,253 @@
+import * as echarts from "echarts";
+
+export const galleryLine = {
+    tooltip: {
+        trigger: "axis",
+    },
+    grid: {
+        top: 28,
+        left: 10,
+        right: 26,
+        bottom: 0,
+        containLabel: true,
+    },
+    xAxis: {
+        name: "时间",
+        nameLocation: "end",
+        nameGap: 4,
+        nameTextStyle: {
+            fontSize: 10,
+            color: "#9F9F9F"
+        },
+        type: 'category',
+        // 分割线
+        axisTick: {
+            show: false,
+        },
+        splitLine: {
+            show: false,
+        },
+        axisLabel: {
+            // interval: 0,
+            rotate: 15,
+            margin: 14,
+            textStyle: {
+                color: "rgba(187, 187, 187, 0.36)",
+                fontSize: 10
+            },
+        },
+        data: ['9/1', '9/7', '9/13', '9/19', '9/25', '10/1', '10/7']
+    },
+    yAxis: {
+        name: "xx指标",
+        nameLocation: "end",
+        type: 'value',
+        nameTextStyle: {
+            fontSize: 10,
+            color: "#9F9F9F"
+        },
+        axisTick: {
+            show: false,
+        },
+        axisLine: {
+            show: true,
+            lineStyle: {
+                color: "rgba(187, 187, 187, 0.36)",
+            },
+        },
+        axisLabel: {
+            textStyle: {
+                color: "#666666",
+                fontSize: 10
+            },
+        },
+        // 分割线
+        splitLine: {
+            show: false,
+            lineStyle: {
+                color: "rgba(255, 255, 255, 0.1)",
+            },
+        },
+    },
+    series: [
+        {
+            data: [40, 58, 62, 64, 68, 74, 80],
+            type: 'line',
+            symbolSize: 6,
+            itemStyle: {
+                color: '#FFD489' // 设置数据点颜色为红色
+            },
+
+            // itemStyle: {
+            //     color: '#CECECE' // 设置数据点颜色
+            // },
+            // lineStyle: {
+            //     type: 'dashed', // 设置线条为虚线
+            //     width: 2,       // 设置线条宽度
+            //     color: '#CECECE' // 设置线条颜色
+            // }
+        }
+    ],
+}
+
+export const galleryIndicatorLine = {
+    tooltip: {
+        trigger: "axis",
+    },
+    legend: {
+        icon: 'roundRect',
+        top: 0,
+        left: 0,
+        orient: 'horizontal',
+        itemWidth: 6,
+        itemHeight: 2,
+        itemGap: 4,
+        textStyle: {
+          align: 'left',
+          fontSize: 10,
+        },
+        data: [
+          { name: '褪绿率', textStyle: { color: '#66B9FB' }, itemStyle: {color: "#66B9FB"} },
+          { name: '花芽率', textStyle: { color: '#1B98FC' }, itemStyle: {color: "#1B98FC"} },
+          { name: '花蕾率', textStyle: { color: '#036CC0' }, itemStyle: {color: "#036CC0"} },
+          { name: '生长异常', textStyle: { color: '#F7BE5A' }, itemStyle: {color: "#F7BE5A"} },
+          { name: '病虫异常', textStyle: { color: '#F99851' }, itemStyle: {color: "#F99851"} }
+        ]
+      },
+    grid: {
+        top: 30,
+        left: 8,
+        right: 18,
+        bottom: 4,
+        containLabel: true,
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        // 分割线
+        axisTick: {
+            show: false,
+        },
+        splitLine: {
+            show: false,
+        },
+        axisLabel: {
+            // interval: 0,
+            rotate: 15,
+            margin: 14,
+            textStyle: {
+                color: "#999999",
+                fontSize: 12
+            },
+        },
+        axisLine: {
+            lineStyle: {
+                color: "#333333",
+            }
+        },
+        data: ['9/1', '9/7', '9/13', '9/19', '9/25', '10/1', '10/7']
+    },
+    yAxis: [{
+        type: 'value',
+        offset: 6,
+        axisTick: {
+            show: false,
+        },
+        axisLine: {
+            show: false,
+        },
+        axisLabel: {
+            align: "center",
+            textStyle: {
+                color: "#999999",
+                fontSize: 12
+            },
+        },
+        // 分割线
+        splitLine: {
+            lineStyle: {
+                type: [4, 3],
+                dashOffset: 5,
+                color: "#333333",
+            },
+        },
+        min: 0, // 最小值固定为0
+        max: 100, // 最大值固定为100
+        splitNumber: 5, // 设置5个分割段
+    }],
+    series: [
+        {
+            name: "褪绿率",
+            data: [
+                ["9/1", 10],
+                ["9/7", 30],
+                ["9/13", 80],
+            ],
+            type: 'line',
+            smooth: true,
+            symbol: "none",
+            itemStyle: { color: "#66B9FB" },
+            lineStyle: {
+                color: "#66B9FB", // 折线颜色为红色
+                width: 2, // 线条宽度
+            },
+        },
+        {
+            name: "花芽率",
+            data: [
+                ["9/7", 8],
+                ["9/19", 50],
+                ["9/25", 80],
+            ],
+            type: 'line',
+            smooth: true,
+            symbol: "none",
+            itemStyle: { color: "#1B98FC" },
+            lineStyle: {
+                color: "#1B98FC", // 折线颜色为红色
+                width: 2, // 线条宽度
+            },
+        },
+        {
+            name: "花蕾率",
+            data: [
+                ["9/19", 12],
+                ["9/25", 30],
+                ["10/1", 60],
+                ["10/7", 70],
+            ],
+            type: 'line',
+            smooth: true,
+            symbol: "none",
+            itemStyle: { color: "#036CC0" },
+            lineStyle: {
+                color: "#036CC0", // 折线颜色为红色
+                width: 2, // 线条宽度
+            },
+        },
+        {
+            name: "生长异常",
+            data: [80, 88, 92, 84, 88, 74, 80],
+            type: 'line',
+            symbol: "none",
+            smooth: true,
+            itemStyle: { color: "#FFB82E" },
+            lineStyle: {
+                color: "#FFB82E", // 折线颜色为红色
+                width: 2, // 线条宽度
+            },
+        },
+        {
+            name: "病虫异常",
+            data: [40, 28, 22, 64, 28, 24, 40],
+            type: 'line',
+            smooth: true,
+            symbol: "none",
+            itemStyle: { color: "#FF7219" },
+            lineStyle: {
+                color: "#FF7219", // 折线颜色为红色
+                width: 2, // 线条宽度
+            },
+        },
+    ],
+}

+ 121 - 0
src/views/warningHome/components/indicatorChart.vue

@@ -0,0 +1,121 @@
+<template>
+    <div class="card-chart" ref="chartRef"></div>
+</template>
+
+<script setup>
+import { onMounted, ref } from "vue";
+import * as echarts from "echarts";
+import { galleryIndicatorLine } from "./chartSeting";
+import { deepClone } from "@/common/commonFun";
+
+const props = defineProps({
+    indexName: {
+        type: String,
+        default: "",
+    },
+    type: {
+        type: String,
+        default: "",
+    },
+    chartData: {
+        type: Array,
+        default: () => [],
+    },
+    isDark: {
+        type: Boolean,
+        default: false
+    },
+});
+
+let myChart = null;
+const chartRef = ref();
+
+let chartDataArr = ref([
+    { date: "9/1", value: 40 },
+    { date: "9/7", value: 60 },
+    { date: "9/13", value: 63 },
+    { date: "9/19", value: 68 },
+    { date: "9/25", value: 80, feature: true },
+    { date: "10/1", value: 85, feature: true },
+    { date: "10/7", value: 88, feature: true },
+]);
+
+onMounted(() => {
+    myChart = echarts.init(chartRef.value);
+    const options = deepClone(galleryIndicatorLine);
+    options.yAxis.name = props.indexName;
+
+    // if (props.type === "feature") {
+    //     processData();
+
+    //     // 数据处理
+    //     let currentData = [];
+    //     let forecastData = [];
+
+    //     props.chartData.forEach((item) => {
+    //         if (item.feature) {
+    //             forecastData.push([item.date, Number(item.value)]);
+    //         } else {
+    //             currentData.push([item.date, Number(item.value)]);
+    //         }
+    //     });
+    //     // 追加实际数据的最后一组数据
+    //     forecastData.unshift(currentData[currentData.length - 1]);
+    // } else {
+    //     // 完成农事
+    //     let seriesData = props.chartData.map((m) => {
+    //         return Number(m.value);
+    //     });
+
+    //     options.series = [
+    //         {
+    //             data: seriesData,
+    //             type: "line",
+    //             symbolSize: 6,
+    //             itemStyle: {
+    //                 color: "#2199F8", // 设置数据点颜色为红色
+    //             },
+    //         },
+    //     ];
+    // }
+
+    let labels = props.chartData.map((m) => {
+        return m.date;
+    });
+
+    if (props.isDark) {
+        options.yAxis[0].splitLine.lineStyle.color = "#333333"
+        options.yAxis[0].axisLabel.textStyle.color = "#999999"
+        options.xAxis.axisLine.lineStyle.color = "#333333"
+        options.xAxis.axisLabel.textStyle.color = "#999999"
+    }
+    myChart.setOption(options);
+});
+
+const processData = () => {
+    const today = new Date();
+    const todayString = today.toISOString().split("T")[0]; // 获取今天的日期,格式为YYYY-MM-DD
+    const datePattern = /(\d+)\/(\d+)/; // 日期格式匹配,假设为MM/DD
+
+    props.chartData.forEach((item) => {
+        const match = item.date.match(datePattern);
+        if (match) {
+            const month = parseInt(match[1], 10);
+            const day = parseInt(match[2], 10);
+            const itemDate = new Date(today.getFullYear(), month - 1, day); // 月份从0开始,所以需要减1
+            if (itemDate > today) {
+                item.feature = true;
+            }
+        }
+    });
+};
+</script>
+
+<style lang="scss" scoped>
+.card-chart {
+    padding: 8px 4px 0 4px;
+    width: 100%;
+    height: 160px;
+    box-sizing: border-box;
+}
+</style>

+ 247 - 0
src/views/warningHome/index.vue

@@ -0,0 +1,247 @@
+<template>
+    <div class="base-container no-events">
+        <fnHeader showDate></fnHeader>
+        <div class="content">
+            <div class="warning-l left">
+                <div class="warning-top">
+                    <div class="top-l yes-events">
+                        <div>
+                            <el-select
+                                v-model="areaVal"
+                                placeholder=""
+                                style="width: 184px"
+                                popper-class="area-select"
+                                >
+                                <el-option label="广东省" :value="0" />
+                                <el-option label="广东省-从化" :value="1" />
+                            </el-select>
+                        </div>
+                        <div class="type-box"><img src="@/assets/images/warningHome/lz.png" /></div>
+                    </div>
+                    <div class="top-r yes-events">
+                        <div class="data-box">
+                            <div class="data-value"><span>526</span>亩</div>
+                            <div class="data-name">种植面积</div>
+                        </div>
+                        <div class="data-box" v-if="areaVal === 1">
+                            <div class="data-value"><span>526</span>亩</div>
+                            <div class="data-name">疑似失管面积</div>
+                        </div>
+                        <div class="data-box">
+                            <div class="data-value"><span>526</span>亩</div>
+                            <div class="data-name">预估产量</div>
+                        </div>
+                        <div class="data-box">
+                            <div class="data-value"><span>526</span>万元</div>
+                            <div class="data-name">预估总产值</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="warning-alarm yes-events">
+                    <alarm-list></alarm-list>
+                </div>
+            </div>
+            <div class="warning-r right yes-events">
+                <album></album>
+            </div>
+            <div class="warning-search">
+                <img src="@/assets/images/warningHome/search-img.png" />
+            </div>
+        </div>
+
+    <div id="popup" class="ol-popup-warning">
+        <div class="warning-info-title">
+            <div class="icon">
+                <img src="@/assets/images/common/chart-icon.png" />
+            </div>
+            <div id="popup-title"></div>
+            <div class="close">
+                <img src="@/assets/images/warningHome/close-btn.png" />
+            </div>
+        </div>
+        <div id="popup-content" class="info-content"></div>
+    </div>
+    </div>
+    <div ref="mapRef" class="bottom-map"></div>
+</template>
+
+<script setup>
+import { onMounted, ref } from "vue";
+import fnHeader from "@/components/fnHeader.vue";
+import WarningMap from "./warningMap";
+import album from "./components/album.vue";
+import alarmList from "./components/alarmList.vue";
+import { useRouter } from "vue-router";
+import { useStore } from "vuex";
+let store = useStore();
+
+let warningMap = new WarningMap();
+const router = useRouter();
+
+const areaVal = ref(0)
+const mapRef = ref();
+onMounted(() => {
+    warningMap.initMap(store.getters.userinfo.location, mapRef.value);
+});
+
+</script>
+
+<style lang="scss" scoped>
+.base-container {
+    width: 100%;
+    height: 100vh;
+    color: #fff;
+    position: absolute;
+    box-sizing: border-box;
+    z-index: 1;
+
+    .content {
+        width: 100%;
+        height: calc(100% - 74px - 48px);
+        padding: 0 20px 0 27px;
+        display: flex;
+        justify-content: space-between;
+        box-sizing: border-box;
+        position: relative;
+        .left,
+        .right {
+            width: calc(376px + 54px);
+            height: 100%;
+            padding-top: 10px;
+            box-sizing: border-box;
+            // display: flex;
+        }
+        .right {
+            width: 395px;
+            .list {
+                width: 100%;
+                height: 100%;
+            }
+        }
+        .warning-search {
+            position: absolute;
+            right: 192px;
+            top: -30px;
+        }
+        .warning-top {
+            display: flex;
+            .top-l {
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                .type-box {
+                    margin-top: 10px;
+                    background: rgba(29, 29, 29, 0.54);
+                    border: 1px solid rgba(255, 212, 137, 0.3);
+                    border-radius: 2px;
+                    text-align: center;
+                    line-height: 48px;
+                    height: 48px;
+                    width: 184px;
+                }
+                ::v-deep {
+                    .el-select__wrapper {
+                        background: rgba(29, 29, 29, 0.54);
+                        box-shadow: 0 0 0 1px rgba(255, 212, 137, 0.3) inset;
+                        height: 50px;
+                        line-height: 50px;
+                        .el-select__caret {
+                            color: #FFD489;
+                        }
+                    }
+                    .el-select__placeholder {
+                        color: #F7BE5A;
+                        font-size: 20px;
+                        font-family: 'PangMenZhengDao';
+                        text-align: center;
+                    }
+                }
+            }
+            .top-r {
+                display: flex;
+                .data-box {
+                    cursor: pointer;
+                    margin-left: 20px;
+                    width: 200px;
+                    height: 104px;
+                    background: url("@/assets/images/warningHome/box-bg.png") no-repeat center center / cover;
+                    display: flex;
+                    flex-direction: column;
+                    align-items: center;
+                    .data-value {
+                        padding-top: 15px;
+                        font-size: 20px;
+                        color: rgba(255, 212, 137, 0.4);
+                        font-family: 'PangMenZhengDao';
+                        span {
+                            font-size: 38px;
+                            color: #F7BE5A;
+                            padding-right: 2px;
+                        }
+                    }
+                    .data-name {
+                        color: #CECECE;
+                        font-size: 16px;
+                    }
+                }
+            }
+        }
+        .warning-alarm {
+            width: 88px;
+            padding-top: 14px;
+        }
+    }
+}
+.bottom-map {
+    width: 100%;
+    height: 100vh;
+    position: absolute;
+    z-index: 0;
+}
+</style>
+
+<style lang="less">
+.area-select {
+    &.el-popper.is-light {
+        background: #232323;
+        border-color: rgba(255, 212, 137, 0.3);
+        box-shadow: 0px 0px 12px rgba(255, 212, 137, 0.3);
+        .el-select-dropdown__item {
+            background: none;
+            color: rgba(255, 212, 137, 0.6);
+        }
+        .el-select-dropdown__item.is-selected {
+            background: rgba(255, 212, 137, 0.2);
+            color: #FFD489;
+        }
+    }
+    &.el-popper.is-light .el-popper__arrow:before {
+        background: #232323;
+        border-color: rgba(255, 212, 137, 0.3);
+    }
+}
+.ol-popup-warning {
+    position: relative;
+    width: 295px;
+    background: rgb(35, 35, 35, 0.86);
+    color: #fff;
+    font-size: 16px;
+    .warning-info-title {
+        display: flex;
+        padding: 6px 10px;
+        background: rgba(255, 255, 255, 0.05);
+        font-size: 18px;
+        .icon {
+            padding-right: 6px;
+        }
+        .close {
+            position: absolute;
+            right: 12px;
+            top: 8px;
+        }
+    }
+    .info-content {
+        padding: 16px 20px 40px 20px;
+    }
+}
+</style>

+ 153 - 0
src/views/warningHome/util.js

@@ -0,0 +1,153 @@
+import VectorSource from 'ol/source/Vector.js';
+import WKT from 'ol/format/WKT.js';
+import Feature from 'ol/Feature.js';
+import VectorLayer from 'ol/layer/Vector.js';
+import Draw from "ol/interaction/Draw";
+import Text from "ol/style/Text";
+import Icon from "ol/style/Icon";
+import {Circle, Fill, Stroke, Style} from 'ol/style.js';
+
+export function getRadius(zoom){
+    if(zoom >= 20){
+        return 120;
+    }
+    if(zoom >= 19){
+        return 70;
+    }
+    if(zoom >= 18){
+        return 30;
+    }
+    if(zoom >= 17){
+        return 15;
+    }
+    return 10;
+}
+
+export function getScale(zoom){
+    if(zoom >= 20){
+        return 0.8;
+    }
+    if(zoom >= 19){
+        return 0.4;
+    }
+    if(zoom >= 18){
+        return 0.2;
+    }
+    if(zoom >= 17){
+        return 0.1;
+    }
+    return 0.1;
+}
+
+export function isShow(zoom,id){
+
+    if(zoom > 18){
+        return true;
+    }
+    if(zoom >= 18){
+        return mo(id, 4)
+    }
+    if(zoom >= 17){
+        return mo(id, 5)
+    }
+    return  mo(id, 5)
+}
+export function mo(id,midu){
+    return id % midu == 0
+}
+
+export const colors = ["#9EFE0C","#FEC30C","#FE760C","#FE0B0C","#0DCAFE","#A80BFF","#E4FE0C","#1A0BFF"];
+export const imgs = ["point6.png","point1.png","point2.png","point3.png","point4.png","point5.png","point6.png","point7.png","point8.png"]
+export const pz = ["未知","白糖罂","桂味","井岗红糯","糯米糍","岭丰糯","进奉","冰荔","妃子笑"]
+
+export function getIndex(name){
+    let i = 0;
+    for(let item of pz){
+        if(name === item){
+            return i;
+        }
+        i++;
+    }
+}
+
+/**
+ *
+ * @param data
+ * @param geomField 形状的字段
+ * @param sign 标识
+ * @returns {Feature<{geometry: any}>}
+ */
+export const newPoint = (data, geomField, sign)=>{
+    let point = new WKT().readGeometry(data[geomField])
+    let feature = new Feature({
+        geometry: point
+    });
+    feature.setId(data.id)
+    feature.set("nodeType",sign)
+    for(let key in data){
+        if(key != geomField && data[key]){
+            feature.set(key,data[key])
+        }
+    }
+    return feature;
+}
+
+export const newGeomPoint = (data)=>{
+    let point = new WKT().readGeometry(data["geom"])
+    let feature = new Feature({
+        geometry: point
+    });
+    feature.setId(data.id)
+    feature.set("nodeType","tree")
+    for(let key in data){
+        if(key != "geom" && data[key]){
+            feature.set(key,data[key])
+        }
+    }
+    return feature;
+}
+
+export const newPolymerFeature = (data)=>{
+    let geom = new WKT().readGeometry(data["wkt"])
+    let feature = new Feature({
+        geometry: geom
+    });
+    feature.set("nodeType","polymer");
+    feature.setId(data.id)
+    for(let key in data){
+        if(key != "wkt"){
+            feature.set(key,data[key])
+        }
+    }
+    return feature;
+}
+
+export const newAreaFeature = (data)=>{
+    let geom = new WKT().readGeometry(data["geom"])
+    let feature = new Feature({
+        geometry: geom
+    });
+    feature.set("nodeType","area");
+    feature.setId(data.id)
+    for(let key in data){
+        if(key != "geom"){
+            feature.set(key,data[key])
+        }
+    }
+    return feature;
+}
+export const pointToFormat = (pointString)=> {
+    let geom = new WKT().readGeometry(pointString)
+        const longitude = geom.getCoordinates()[0];
+        const latitude = geom.getCoordinates()[1];
+        // 转换为度的格式
+        const formattedLongitude = `${longitude.toFixed(0)}°E`;
+        const formattedLatitude = `${latitude.toFixed(0)}°N`;
+
+        const result = `${formattedLongitude},${formattedLatitude}`;
+        console.log(result); // 输出: 111.011490207°E,21.7739355047°N
+        return result
+
+}
+
+

+ 67 - 0
src/views/warningHome/warningLayer.js

@@ -0,0 +1,67 @@
+import config from "@/api/config.js";
+import * as KMap from "@/utils/ol-map/KMap";
+import * as util from "@/common/ol_common.js";
+import Point from "ol/geom/Point.js";
+import Feature from "ol/Feature";
+import VectorLayer from "ol/layer/Vector.js";
+import WKT from "ol/format/WKT.js";
+import ScaleLine from "ol/control/ScaleLine";
+import { useRouter } from "vue-router";
+import {unByKey} from "ol/Observable";
+import Style from "ol/style/Style";
+import Icon from "ol/style/Icon";
+import {Vector as VectorSource} from "ol/source";
+import {newRegionFeature} from "../zhgl/map";
+
+/**
+ * @description 地图层对象
+ */
+class RegionLayer {
+  constructor(map, farm) {
+    let that = this;
+    this.farmId = farm.id
+    this.vectorStyle  = new KMap.VectorStyle();
+
+    this.regionLayer = new KMap.VectorLayer("regionLayer",99,{
+      minZoom:15,
+      style:this.vectorStyle.getPolygonStyle("#fba50410", "#eee5e5", 2)
+    })
+
+
+    map.addLayer(this.regionLayer.layer)
+    this.initData(this.farmId)
+  }
+  //得到点样式
+  getStyle(feature){
+    return this.getIconStyle(feature)
+  }
+
+  initData(farmId){
+    let that = this
+    VE_API.region.list({farmId}).then(({data})=>{
+      let features = []
+      for(let item of data){
+        let f = newRegionFeature(item,"wkt");
+        features.push(f)
+      }
+      const source = new VectorSource({
+        features: features,
+      });
+      that.regionLayer.layer.setSource(source)
+    })
+  }
+
+  reset(farm, region){
+    this.clearLayer()
+    this.initData(farm.id, region.id)
+  }
+
+  // 清除聚合图层,解除绑定
+  clearLayer() {
+    if (this.regionLayer) {
+      this.regionLayer.layer.getSource().clear()
+    }
+  }
+}
+
+export default RegionLayer;

+ 86 - 0
src/views/warningHome/warningMap.js

@@ -0,0 +1,86 @@
+import config from "@/api/config.js";
+import * as KMap from "@/utils/ol-map/KMap";
+import * as util from "@/common/ol_common.js";
+import Point from "ol/geom/Point.js";
+import Feature from "ol/Feature";
+import VectorLayer from "ol/layer/Vector.js";
+import WKT from "ol/format/WKT.js";
+import ScaleLine from "ol/control/ScaleLine";
+import { useRouter } from "vue-router";
+import Overlay from 'ol/Overlay'
+
+/**
+ * @description 地图层对象
+ */
+class HomeMap {
+  constructor() {
+    let that = this;
+    let vectorStyle = new KMap.VectorStyle();
+    this.vectorStyle = vectorStyle;
+  }
+
+  initMap(location, target) {
+    let level = 6;
+    let coordinate = util.wktCastGeom(location).getFirstCoordinate();
+    this.kmap = new KMap.Map(target, level, coordinate[0], coordinate[1], null, 6, 22);
+
+    this.addPopup()
+    this.addMapListen()
+  }
+
+  addMapListen() {
+    let that = this
+    // 监听地图点击事件
+    // 创建弹窗图层
+    this.popup = new Overlay({
+      element: document.getElementById('popup'),
+      positioning: 'bottom-center',
+      offset: [0, -10],
+    });
+    this.kmap.map.addOverlay(this.popup);
+    setTimeout(() => {
+      console.log('');
+      // this.popup.getElement().innerHTML = `<div class="flight" id="flight">231231</div>`;
+    }, 100)
+    that.kmap.on('singleclick', function (event) {
+      let feature = that.kmap.map.forEachFeatureAtPixel(event.pixel, function (feature) {
+        return feature;
+      });
+      console.log('feature', feature);
+      if (feature) {
+        // 在这里可以获取feature的属性,并显示在弹窗中
+        let content = '<p>Feature properties:</p><ul>';
+        for (let key in feature.getProperties()) {
+          content += '<li>' + key + ': ' + feature.get(key) + '</li>';
+        }
+        content += '</ul>';
+        document.getElementById('popup-title').innerHTML = "广东-清远";
+        document.getElementById('popup-content').innerHTML = content;
+        that.popup.setPosition(event.coordinate); // 设置弹窗位置为点击位置
+      } else {
+        // that.popup.setPosition(undefined); // 如果没有点击到feature,则隐藏弹窗
+        
+        // 在这里可以获取feature的属性,并显示在弹窗中
+        let content = '<div>';
+        // for (let key in feature.getProperties()) {
+        //   content += '<li>' + key + ': ' + feature.get(key) + '</li>';
+        // }
+        content += '区县的气象风险</div>';
+        document.getElementById('popup-title').innerHTML = "广东-清远";
+        document.getElementById('popup-content').innerHTML = content;
+        that.popup.setPosition(event.coordinate); // 设置弹窗位置为点击位置
+      }
+    })
+  }
+
+  // 点击地图出现弹窗
+  addPopup() {
+    // 创建弹窗图层
+    this.popup = new Overlay({
+      element: document.getElementById('popup')
+    });
+    this.kmap.map.addOverlay(this.popup);
+  }
+}
+
+export default HomeMap;

Some files were not shown because too many files changed in this diff