فهرست منبع

fix: 植保机,点位,问答

刘秀芳 1 ماه پیش
والد
کامیت
9a7ec4f674

+ 1 - 0
src/api/config.js

@@ -33,5 +33,6 @@ module.exports = {
         "find",
         "poi",
         "land_check",
+        "bbs_my",
     ]
 }

+ 2 - 2
src/api/modules/deep_seek.js

@@ -2,11 +2,11 @@ const config = require("../config")
 
 module.exports = {
     ask: {
-        url: config.base_dev_url + "bbs_my/ask",
+        url: config.base_dev_url + "bbs_my/ask?key="+config.mini_key,
         type: "post",
     },
     res: {
-        url: config.base_dev_url + "bbs_my/res",
+        url: config.base_dev_url + "bbs_my/res?key="+config.mini_key,
         type: "get",
     }
 }

BIN
src/assets/images/warningHome/chat/fly-point.png


BIN
src/assets/images/warningHome/chat/track1.png


BIN
src/assets/images/warningHome/chat/track10.png


BIN
src/assets/images/warningHome/chat/track11.png


BIN
src/assets/images/warningHome/chat/track12.png


BIN
src/assets/images/warningHome/chat/track2.png


BIN
src/assets/images/warningHome/chat/track3.png


BIN
src/assets/images/warningHome/chat/track4.png


BIN
src/assets/images/warningHome/chat/track5.png


BIN
src/assets/images/warningHome/chat/track6.png


BIN
src/assets/images/warningHome/chat/track7.png


BIN
src/assets/images/warningHome/chat/track8.png


BIN
src/assets/images/warningHome/chat/track9.png


BIN
src/assets/images/warningHome/chat/trackpng.png


+ 16 - 3
src/components/static_map_change/Layers.js

@@ -36,6 +36,8 @@ class StaticMapLayers {
         this.vectorStyle = new VectorStyle()
         this.layerData = {}
         this.cacheStyle = {}
+        this.timeIndex = 0
+        this.layerName = ""
     }
     initStaticMapLayers(map){
         let that = this
@@ -53,13 +55,24 @@ class StaticMapLayers {
                     that.layerData[key] = {legend:item.legend, layer:that.addStaticImgLayer(map, item)}
                 }
             }
-            that.autoTest()
+            // that.autoTest()
+            // 时间轴
+            eventBus.on("weatherTime:changeTime", ({index}) => {
+                this.timeIndex = index
+                this.show(this.layerName)
+            })
         })
     }
+    
     show(key,isFit = false){
+        if (isFit) {
+            this.timeIndex = 0
+        }
+        this.layerName = key
         this.hideAll()
-        let layer = this.layerData[key].layer
-        eventBus.emit("alarmList:changeMapLayer", {legendUrl:this.layerData[key].legend,
+        let keyText = key+this.timeIndex
+        let layer = this.layerData[keyText].layer
+        eventBus.emit("alarmList:changeMapLayer", {legendUrl:this.layerData[keyText].legend,
             colors:layer.layer.get("colors"), labels:layer.layer.get("labels")});
         layer.show()
         if(isFit && layer.layer.getExtent){

+ 115 - 0
src/components/static_map_change/pointLayer.js

@@ -0,0 +1,115 @@
+import * as KMap from '@/utils/ol-map/KMap';
+import Style from "ol/style/Style";
+import Icon from "ol/style/Icon";
+import { newPoint } from "@/utils/map.js";
+
+/**
+ *
+ */
+class pointLayer {
+  constructor(kmap) {
+    this.kmap = kmap
+    // 位置图标
+    this.pointLayer = new KMap.VectorLayer("pointLayer", 1000, {
+        visible: false,
+        style: () => {
+            return new Style({
+            image: new Icon({
+                src: require("@/assets/images/warningHome/chat/fly-point.png"), 
+                scale: 0.6,
+            }),
+            });
+        },
+        });
+    this.kmap.addLayer(this.pointLayer.layer);
+
+    this.setMapPoint()
+  }
+
+  setMapPoint() {
+    // 图标点位
+    let point = [
+      {
+        id: 1,
+        wkt: "POINT(110.937533572 21.9752048347)",
+        url: "1",
+      },
+      {
+        id: 2,
+        wkt: "POINT(111.006303846 22.0427499)",
+        url: "2",
+      },
+      {
+        id: 3,
+        wkt: "POINT(110.952463176 22.0266637782)",
+        url: "3",
+      },
+      {
+        id: 4,
+        wkt: "POINT(110.964404259 21.954198378)",
+        url: "4",
+      },
+      {
+        id: 6,
+        wkt: "POINT(110.870809782 22.0103192249)",
+        url: "5",
+      },
+      {
+        id: 8,
+        wkt: "POINT(111.004240017 22.0377065354)",
+        url: "6",
+      },
+      {
+        id: 9,
+        wkt: "POINT(110.907575135 21.9370288761)",
+        url: "7",
+      },
+      {
+        id: 10,
+        wkt: "POINT(110.861455112 21.9521709844)",
+        url: "8",
+      },
+      {
+        id: 11,
+        wkt: "POINT(110.941859265 21.9810418917)",
+        url: "9",
+      },
+      {
+        id: 12,
+        wkt: "POINT(110.85275219 22.0177644506)",
+        url: "10",
+      },
+      {
+        id: 13,
+        wkt: "POINT(110.937319394 22.0469353146)",
+        url: "11",
+      },
+      {
+        id: 15,
+        wkt: "POINT(111.002916366 22.0546410706)",
+        url: "12",
+      },
+    ]
+    point.map((item) => {
+      let point = newPoint(item, 'wkt');
+      this.pointLayer.addFeature(point)
+    })
+    this.pointLayer.layer.setVisible(false);
+  }
+
+  showPoint() {
+    this.pointLayer.layer.setVisible(true);
+    let extent = this.pointLayer.layer.getExtent();
+    if(extent && extent[0] != Infinity){
+          console.log("show layer",extent)
+          this.pointLayer.mapInstance.fit(extent,{padding:[100,100,100,100]})
+    }
+  }
+
+  hidePoint() {
+    this.pointLayer.layer.setVisible(false);
+  }
+
+}
+
+export default pointLayer;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 2
src/views/warningHome/components/chat_components/chat.json


+ 56 - 25
src/views/warningHome/components/chat_components/index.vue

@@ -27,9 +27,18 @@
                                 <el-table-column prop="name" label="企业名称" />
                                 <el-table-column prop="area" label="覆盖范围" show-overflow-tooltip />
                                 <el-table-column prop="step" label="完成进度" show-overflow-tooltip />
-                                <el-table-column prop="rate" label="系统/信用评分" show-overflow-tooltip />
+                                <el-table-column prop="rate" label="系统农事成效评分" show-overflow-tooltip />
                                 <el-table-column prop="farmRate" label="农户评价" show-overflow-tooltip />
-                                <el-table-column prop="result" label="成效" show-overflow-tooltip />
+                            </el-table>
+                        </div>
+                        <div class="table-wrap" v-if="msg.text.name === '当前高州的作物分布和物候期?' && msg.loadEnd">
+                            <el-table :data="tableData3" border style="width: 100%">
+                                <el-table-column prop="name" label="农作物类型" />
+                                <el-table-column prop="area" label="播种面积(亩)">
+                                    <template #default="scope">
+                                        {{ scope.row.area  }}亩
+                                    </template>
+                                </el-table-column>
                             </el-table>
                         </div>
                     </div>
@@ -64,7 +73,7 @@
                         <div class="bubble">
                             <div class="ask-title">你可以试着问我</div>
                             <div class="ask-list">
-                                <div class="to-map" v-for="(ask, askI) in msg.text.content" :key="askI" @click="toMapLayer(ask)">
+                                <div class="to-map" v-for="(ask, askI) in msg.text.content" :key="askI" @click="toMapLayer(ask, msg.text)">
                                     <li>
                                         {{ ask }}
                                     </li>
@@ -150,60 +159,82 @@ const tableData = ref([
 ])
 
 const tableData2 = ref([
-    {name: "天合股份", area: "广东省及周边省份,100家配送中心", step: "2024年上半年服务243.71万亩,带动增收1.11亿元;2025年目标完成率约24%", rate: "未明确评分", farmRate: "服务超6万户,节本增收显著", result: "绿色农资全覆盖,建立“耕、种、管、收”全程服务体系"},
-    {name: "大炎农业", area: "广东省及周边", step: "承担17.84万亩水稻、6.17万亩蔬菜物化补贴;带动654户农户销售226.1吨", rate: "绿色补贴覆盖率100%", farmRate: "合作社带动增收,农户组织化程度提高", result: "助农销售1.3亿元,建立稳定增收渠道"},
-    {name: "美荔公司", area: "广东省及周边", step: "完成30万亩次测土配方施肥目标", rate: "A级信用评定", farmRate: "守信经营,服务标准化受认可", result: "保障农资质量安全,推动化肥减量增效,覆盖本地10家A级企业"},
+    {name: "天*股份", area: "广东省及周边省份,100家配送中心", step: "此次花期统防统治接收任务28个,完成进度64%。", rate: "90分", farmRate: "89分"},
+    {name: "大*农业", area: "广东省及周边省份", step: "此次花期统防统治接收任务17个,完成进度80%。", rate: "95分", farmRate: "92分"},
+    {name: "美*公司", area: "广东省及周边省份", step: "此次花期统防统治接收任务13个,完成进度59%。", rate: "89分", farmRate: "90分"},
+    {name: "盛*农业", area: "广东省、广西省,50家配送中心", step: "此次花期统防统治接收任务25个,完成进度72%", rate: "91分", farmRate: "88分"},
+    {name: "宝*公司", area: "广东省及周边省份", step: "此次花期统防统治接收任务20个,完成进度67%", rate: "90分", farmRate: "92分"},
+    {name: "优*农业", area: "广东省、福建省,30家配送中心", step: "此次花期统防统治接收任务15个,完成进度85%", rate: "94分", farmRate: "93分"},
+    {name: "新*科技", area: "广东省及周边省份", step: "此次花期统防统治接收任务18个,完成进度70%", rate: "87分", farmRate: "86分"},
+    {name: "海*农资", area: "广东省及周边省份", step: "此次花期统防统治接收任务21个,完成进度91%", rate: "96分", farmRate: "94分"},
+    {name: "丰*公司", area: "广东省、海南省", step: "此次花期统防统治接收任务20个,完成进度68%", rate: "88分", farmRate: "85分"},
+    {name: "绿*农业", area: "广东省、广西省,70家配送中心", step: "此次花期统防统治接收任务30个,完成进度75%", rate: "91分", farmRate: "93分"},
+    {name: "亮*集团", area: "广东省、云南省 ", step: "此次花期统防统治接收任务16个,完成进度70%", rate: "91分", farmRate: "89分"},
+])
+
+const tableData3 = ref([
+    {name: "水稻", area: "839884"},
+    {name: "玉米", area: "16079"},
+    {name: "番薯", area: "39467"},
+    {name: "花生", area: "121093"},
+    {name: "中草药材", area: "72357"},
+    {name: "蔬菜", area: "407695"},
+    {name: "荔枝", area: "590322"},
+    {name: "龙眼", area: "324390"},
+    {name: "香蕉", area: "258688"},
+    {name: "柚子", area: "14527"},
+    {name: "黄皮", area: "48020"},
 ])
 
 const steps = [
-    { type: "auto", text: { header: "您好,飞鸟智慧种植大脑是您的私人管家" }, loadEnd: false },
+    { type: "auto", text: { header: "您好,飞鸟智慧种植大脑是您的私人管家" } },
     {
         type: "ask",
         text: {
-            askHeader: "当前高州的作物分布",
-            askContent: ["当前高州的作物分布",],
+            mapName: "分散种植",
+            askHeader: "当前高州的作物分布和物候期?",
+            askContent: ["当前高州的作物分布和物候期?",],
         },
-        loadEnd: false
     },
     {
         type: "ask",
         text: {
+            mapName: "爆花态势",
             askHeader: "当前区域荔枝有什么生长风险?",
             askContent: ["当前区域荔枝有什么生长风险?"],
         },
-        loadEnd: false
     },
     {
         type: "ask",
         text: {
-            askHeader: "当前区域哪些有荔枝地块有病虫害",
-            askContent: ["当前区域哪些有荔枝地块有病虫害"],
+            mapName: "病虫态势",
+            askHeader: "当前区域哪些有荔枝地块病虫害风险较高",
+            askContent: ["当前区域哪些有荔枝地块病虫害风险较高"],
         },
-        loadEnd: false
     },
     {
         type: "ask",
         text: {
+            mapName: "农情需求",
             askHeader: "现在哪些地方有农情需求",
             askContent: ["现在哪些地方有农情需求"],
         },
-        loadEnd: false
     },
     {
         type: "ask",
         text: {
+            mapName: "植保机",
             askHeader: "哪些地方有植保机",
             askContent: ["哪些地方有植保机"],
         },
-        loadEnd: false
     },
     {
         type: "ask",
         text: {
+            mapName: "",
             askHeader: "花期统防统治报表,有没有与农资对接",
             askContent: ["花期统防统治报表,有没有与农资对接"],
         },
-        loadEnd: false
     },
 ];
 
@@ -243,9 +274,9 @@ const loadState = () => {
     }
 };
 
-const toMapLayer = (name) => {
-    eventBus.emit("chat:showMapLayer", name)
+const toMapLayer = (name, text) => {
     askText(name)
+    eventBus.emit("chat:showMapLayer", {name, mapName: text.mapName})
     // addSystemReply('system', {header: name, content: '', name}, () => {
     //     steps[stepIndex.value].loadEnd = true
     // });
@@ -269,7 +300,6 @@ const sendMessage = () => {
 
     // 模拟系统回复
     // setTimeout(() => {
-    //     console.log("userInput", userText);
     //     messages.value.push({ text: "系统回复: " + userText, type: "system" });
     // }, 500);
 
@@ -310,15 +340,13 @@ const sendMessage = () => {
     userInput.value = "";
 };
 
-const loadEnd = ref(false);
-
 // **逐字显示系统回复(header 和 content)**
 const addSystemReply = (type = "system", textObject, callback) => {
     isProcessing.value = true
     let currentHeader = "";
     let currentContent = "";
     if (type === "ask") {
-        messages.value.push({ text: { header: textObject.askHeader, content: textObject.askContent, }, type });
+        messages.value.push({ text: { header: textObject.askHeader, content: textObject.askContent, mapName: textObject.mapName }, type });
     } else {
         messages.value.push({ text: { header: currentHeader, content: currentContent, name: textObject.name }, type });
     }
@@ -422,7 +450,7 @@ onMounted(() => {
 });
 
 eventBus.on("chat:hideMapLayer", () => {
-    setTimeout(triggerNextStep, 2000);
+    // setTimeout(triggerNextStep, 2000);
 })
 
 // **滚动到底部**
@@ -491,12 +519,15 @@ const scrollToBottom = () => {
             border-bottom-color: #555555;
             border-right-color: #555555;
         }
+        .el-table .el-table__body tr:hover > td {
+            background-color: transparent !important;
+            }
         .el-table {
             color: #fff;
         }
         .el-table tr {
             background: #2F2F2F;
-            pointer-events: none;
+            // pointer-events: none;
         }
         .el-table thead {
             color: #999999;

+ 7 - 4
src/views/warningHome/components/trackDialog.vue

@@ -8,7 +8,7 @@
                 </div>
             </template>
             <div class="track">
-                <img class="track-img" src="@/assets/images/warningHome/chat/trackpng.png" alt="">
+                <img class="track-img" :src="require('@/assets/images/warningHome/chat/track'+ urlIndex +'.png')" alt="">
             </div>
         </el-dialog>
     </div>
@@ -22,11 +22,14 @@ const centerDialogVisible = ref(false);
 
 onMounted(() => {
     // ai与地图交互
-    eventBus.on("chat:showMapLayer", handleMapLayer)
+    eventBus.on("chat:showTrackDialog", showTrackDialog)
 })
 
-const handleMapLayer = (name) => {
-    console.log('handleMapLayerdialog', name);
+const urlIndex = ref(1)
+const showTrackDialog = (url) => {
+    console.log('url', url)
+    urlIndex.value = url
+    centerDialogVisible.value = true
 }
 </script>
 

+ 15 - 6
src/views/warningHome/index.vue

@@ -57,7 +57,7 @@
                 <div class="map-legend" v-if="legendImg && hideChatMapLayer">
                     <img :src="legendImg" />
                 </div>
-                <div class="map-legend chat-legend" v-if="!hideChatMapLayer">
+                <div class="map-legend chat-legend" v-show="!legendImg || !hideChatMapLayer">
                     <StaticMapLegend></StaticMapLegend>
                 </div>
             </div>
@@ -98,6 +98,7 @@
 import "./map/mockFarmLayer";
 import StaticMapLayers from "@/components/static_map_change/Layers.js"
 import StaticMapLegend from "@/components/static_map_change/legend.vue"
+import StaticMapPointLayers from "@/components/static_map_change/pointLayer.js"
 import { onMounted, ref } from "vue";
 import fnHeader from "@/components/fnHeader.vue";
 import WarningMap from "./warningMap";
@@ -111,13 +112,13 @@ import { useRouter } from "vue-router";
 import eventBus from "@/api/eventBus";
 import { areaListOptions } from "./area";
 import { useStore } from "vuex";
-import Legend from "../../components/static_map_change/legend";
 
 let store = useStore();
 
 let warningMap = new WarningMap();
 let alarmLayer = null;
 let staticMapLayers = null;
+let staticMapPointLayers = null;
 const router = useRouter();
 
 const areaVal = ref(["3"]);
@@ -129,6 +130,7 @@ onMounted(() => {
     warningMap.initMap(store.getters.userinfo.location, mapRef.value);
     alarmLayer = new AlarmLayer(warningMap.kmap);
     staticMapLayers = new StaticMapLayers(warningMap.kmap);
+    staticMapPointLayers = new StaticMapPointLayers(warningMap.kmap);
     // setTimeout(() => {
     //   staticMapLayers.show("testpng")
     // },2000)
@@ -152,11 +154,18 @@ onMounted(() => {
 
 // ai与地图交互
 const hideChatMapLayer = ref(true)
-const handleMapLayer = (name) => {
+const handleMapLayer = ({mapName}) => {
     hideChatMapLayer.value = false
-    console.log('name', name);
-    // staticMapLayers.show("干旱缺水")
-    staticMapLayers.show("爆花态势0")
+    console.log('mapName', mapName);
+    staticMapPointLayers.hidePoint()
+    staticMapLayers.hideAll()
+    if (mapName === "植保机") {
+        staticMapLayers.show("分散种植", true)
+        staticMapPointLayers.showPoint()
+    } else if (mapName) {
+        // staticMapLayers.show("作物种类")
+        staticMapLayers.show(mapName, true)
+    }
 }
 
 const toggleChatMapLayer = () => {

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

@@ -55,6 +55,10 @@ class HomeMap {
           let fs = feature.get("features");
           fs.length > 0 && eventBus.emit('MockFarmLayer:click', { sampleIdVal: fs[0].get("targetSampleId"), farmIdVal: fs[0].get("mockFarmId") });
         }
+        if (layer instanceof VectorLayer && layer.get("name") === "pointLayer") {
+          hasFeature = true
+          eventBus.emit("chat:showTrackDialog", feature.get("url"))
+        }
         return feature;
       });
       if (!hasFeature) {

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است