From b41b6bcda8d085b0c9b0f3d176e76fbed97557a8 Mon Sep 17 00:00:00 2001
From: 584911253@qq.com <584911253@qq.com>
Date: 星期二, 14 三月 2023 16:15:47 +0800
Subject: [PATCH] 拾取分析功能开发

---
 src/api/api.js                          |    5 
 src/assets/lang/zh.js                   |    1 
 src/components/MapView/mapPickUpPop.vue |  223 +++++++++++++++++++++++++++++++++++++
 src/views/Tools/LayerTree.vue           |   23 +++
 src/store/index.js                      |    1 
 src/views/Synthesis/LeftMenu.vue        |   57 +++++++++
 src/assets/lang/en.js                   |    1 
 src/views/Tools/queryinfo.vue           |    8 
 8 files changed, 314 insertions(+), 5 deletions(-)

diff --git a/src/api/api.js b/src/api/api.js
index 015b095..acd801e 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -1059,6 +1059,11 @@
   return request.post('/comprehensive/updateModel', params);
 }
 
+//缁煎悎灞曠ず=>鎷惧彇
+export function selectByBuffer(params) {
+  return request.get('/inquiry/selectByBuffer', { params: params });
+}
+
 
 
 
diff --git a/src/assets/lang/en.js b/src/assets/lang/en.js
index 82fcdaa..81291ac 100644
--- a/src/assets/lang/en.js
+++ b/src/assets/lang/en.js
@@ -510,6 +510,7 @@
     polygonquery: 'Polygon Query',
     attributequery: 'Attribute Query',
     rangequery: 'Spatial query',
+    pickup: 'Pick up',
     gpsrtk: 'GPS-RTK',
     placenamelocation: 'Placename Location',
     distancemeasure: 'Distance Measure',
diff --git a/src/assets/lang/zh.js b/src/assets/lang/zh.js
index 44dd58b..c97c3b8 100644
--- a/src/assets/lang/zh.js
+++ b/src/assets/lang/zh.js
@@ -512,6 +512,7 @@
     polygonquery: '澶氳竟褰㈡煡璇�',
     attributequery: '灞炴�ф煡璇�',
     rangequery: '绌洪棿鏌ヨ',
+    pickup: '鎷惧彇',
     gpsrtk: '鍧愭爣瀹氫綅',
     placenamelocation: '鍦板悕瀹氫綅',
     distancemeasure: '璺濈娴嬮噺',
diff --git a/src/components/MapView/mapPickUpPop.vue b/src/components/MapView/mapPickUpPop.vue
new file mode 100644
index 0000000..fb95e86
--- /dev/null
+++ b/src/components/MapView/mapPickUpPop.vue
@@ -0,0 +1,223 @@
+<template>
+  <div class="menuPop">
+    <div class="leftBox">
+      <ul>
+        <li
+          v-for="(item, index) in option"
+          @click="setTableChange(item)"
+          class="leftBoxLi"
+        >
+          {{ item.cnName }}
+        </li>
+      </ul>
+    </div>
+    <div class="rightBox">
+      <div class="tableBox">
+        <el-table
+          :data="tableData"
+          ref="dialogPayChannel"
+          height="100%"
+          style="width: 100%"
+          border
+        >
+          <el-table-column
+            align="center"
+            type="index"
+            label="搴忓彿"
+            width="50"
+          />
+          <el-table-column
+            v-for="(item, index) in attributeData"
+            :key="index"
+            :label="item.alias"
+            :prop="item.field"
+            show-overflow-tooltip
+            align="center"
+          ></el-table-column>
+        </el-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  dataQuery_selectByPage,
+  inquiry_selectDomains,
+  inquiry_selectFields,
+  dataQuerySelectWktById,
+  sign_getPublicKey,
+  dataLib_selectDownloadFile,
+  dataQuery_selectDbOverflowDep,
+  apply_insertApply,
+  decr,
+  encr,
+  dataLib_selectDepsByIds, selectByBuffer
+} from '../../api/api.js'
+import { getToken } from "@/utils/auth"
+import $ from "jquery"
+import { View } from "ol"
+export default {
+  data() {
+    return {
+      option:null,
+      tableData: [],
+      attributeData:[],
+      queryForm:{
+        pageIndex:1,
+        pageSize:10,
+      },
+      pageCount:0,
+      pickupInfo:null,
+      optionx:[],
+      wkt:null,
+    }
+  },
+  methods: {
+    async getTableDateHidder() {
+      let name = this.pickupInfo.url.replaceAll("LF:","");
+      name = name.replaceAll("_","");
+      const data = await inquiry_selectFields({ name: name })
+      if (data.code != 200) {
+        this.$message.error("鍒楄〃璋冪敤澶辫触")
+      }
+      const data1 = await inquiry_selectDomains({ name: name })
+      if (data1.code != 200) {
+        this.$message.error("鍒楄〃璋冪敤澶辫触")
+      }
+      this.optionx = []
+      this.attributeData = []
+      var valadata = data.result
+      var laydomain = data1.result
+
+      for (var i in valadata) {
+        if (valadata[i].showtype == 1) {
+          if (
+            valadata[i].domainNa != null &&
+            valadata[i].domainNa != undefined
+          ) {
+            for (var j in laydomain) {
+              if (laydomain[j].domName == valadata[i].domainNa) {
+                valadata[i].domainNa = laydomain[j].codeDesc
+              }
+            }
+          }
+          this.optionx.push(valadata[i])
+          this.attributeData.push(valadata[i])
+        }
+      }
+      this.getTableData()
+    },
+    setTableChange(res) {
+      this.pickupInfo = res;
+      this.getTableDateHidder()
+    },
+    async getTableData() {
+      this.tableData = []
+      let name = this.pickupInfo.url.replaceAll("LF:","");
+      name = name.replaceAll("_","");
+      let info = this.$store.state.pickUpPointInfo;
+      let params = {
+        buffer:10,
+        limit:20,
+        name:name,
+        wkt:`POINT (${info.lon} ${info.lat})`,
+      }
+      const data = await selectByBuffer(params)
+      if (data.code != 200) {
+        this.$message.error("鍒楄〃璋冪敤澶辫触")
+      }
+
+      var val_Data = data.result
+      for (var i in val_Data) {
+        var valste = val_Data[i]
+        for (var j in this.optionx) {
+          if (
+            this.optionx[j].domainNa != null &&
+            this.optionx[j].domainNa != undefined
+          ) {
+            valste[this.optionx[j].field] = this.optionx[j].domainNa
+          }
+        }
+      }
+      this.pageCount = data.count
+      this.tableData = data.result
+    },
+  },
+  mounted() {
+    this.option = JSON.parse(sessionStorage.getItem("checkedLayers"));
+    this.pickupInfo = this.option.length > 0 ? this.option[0] : {};
+    this.getTableDateHidder();
+    this.$bus.$on("treeChanged", changed => {
+      if (changed){
+        this.option = JSON.parse(sessionStorage.getItem("checkedLayers"));
+      }
+    })
+  },
+}
+</script>
+
+<style scoped lang="less">
+.menuPop {
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  padding: 0;
+  overflow: hidden;
+  border: 1px solid gray;
+  float: left;
+  .leftBox {
+    width: 20%;
+    height: 100%;
+    overflow: auto;
+    float: left;
+    border-right: 1px solid gray;
+    li {
+      line-height: 20px;
+      border-bottom: 1px solid gray;
+      padding: 5px;
+      background: rgba(255, 255, 255, 0.2);
+    }
+    li:hover {
+      color: #409eff;
+      background: rgba(128, 128, 128, 0.2);
+    }
+    .leftDown {
+      width: 94%;
+      padding: 3%;
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+
+  .rightBox {
+    width: calc(80% - 1px);
+    height: 100%;
+    float: left;
+    .rightTitle {
+      padding: 5px;
+
+      width: 100%;
+    }
+    .tableBox {
+      position: relative;
+      height: 89%;
+    }
+    .rightPage {
+      margin-left: 50px;
+      /*涓嶅彲鐐瑰嚮鐨�*/
+    }
+
+    .boxClose {
+      float: right;
+      margin-right: 20px;
+    }
+  }
+}
+
+li {
+  line-height: 20px;
+  border-bottom: 1px solid gray;
+  padding: 5px;
+}
+</style>
diff --git a/src/store/index.js b/src/store/index.js
index 689fe65..0a314fe 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -40,6 +40,7 @@
     propertiesFlag: null,
     propertiesName: null,
     propertiesInfo: null,
+    pickUpPointInfo: null,
 
     //涓婚鍒囨崲
     theme: variables.theme,
diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue
index 4bb524a..bbde562 100644
--- a/src/views/Synthesis/LeftMenu.vue
+++ b/src/views/Synthesis/LeftMenu.vue
@@ -251,8 +251,8 @@
   comprehensive_deletes,
   comprehensive_selectModelByPageAndCount,
   comprehensive_insertModel,
-  comprehensive_updateModel
-} from "../../api/api.js";
+  comprehensive_updateModel, selectByBuffer
+} from '../../api/api.js'
 import {
   OverviewMap,
   defaults as defaultControls,
@@ -471,6 +471,12 @@
             name: "绌洪棿鏌ヨ",
             css: "twoMenu_imge52",
           },
+          {
+            id: "e3",
+            label: "synthesis.pickup",
+            name: "鎷惧彇",
+            css: "twoMenu_imge52",
+          },
         ],
         [
           {
@@ -669,6 +675,7 @@
       }],
       modelClip:false,
       clippingPlanes:null,
+      showPickUp:false,
     };
   },
   methods: {
@@ -1384,12 +1391,30 @@
     setIquery(res) {
       switch (res) {
         case "e2":
+          Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
           this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean;
           this.$store.state.mapMenuBoxFlag = "1";
           break;
         case "e1":
+          Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
           this.$store.state.mapMenuBoolean = !this.$store.state.mapMenuBoolean;
           this.$store.state.mapMenuBoxFlag = "2";
+          break;
+          //鎷惧彇鍔熻兘
+        case "e3":
+          this.$store.state.mapMenuBoolean = false;
+          this.showPickUp = !this.showPickUp;
+          if (this.showPickUp){
+            let that = this;
+            Viewer.screenSpaceEventHandler.setInputAction(function (event) {
+              let p = sgworld.Navigate.getMouseDegrees(event);
+              console.log(p);
+              that.getPickUpData(p);
+            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+          }else {
+            this.$refs.queryinfo.closeAll();
+            Viewer.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+          }
           break;
       }
     },
@@ -2395,6 +2420,34 @@
     handleAttatchChange(val) {
       this.attacgSelection = val;
     },
+    //鎷惧彇鏁版嵁鑾峰彇
+    async getPickUpData(info){
+      let checkedLayers = JSON.parse(sessionStorage.getItem("checkedLayers"));
+      let showPop = false;
+      for (const item of checkedLayers) {
+        let name = item.url.replaceAll("LF:","");
+        name = name.replaceAll("_","");
+        let params = {
+          buffer:10,
+          limit:20,
+          name:name,
+          wkt:`POINT (${info.lon} ${info.lat})`,
+        }
+        const res = await selectByBuffer(params);
+        if (res.result && res.result.length > 0){
+          this.$store.state.mapPopBoxFlag = "4";
+          this.$store.state.pickUpPointInfo = info;
+          this.$refs &&
+          this.$refs.queryinfo &&
+          this.$refs.queryinfo.open("鎷惧彇鍒嗘瀽", null,);
+          showPop = true;
+          break;
+        }
+      }
+      if (!showPop){
+        this.$message.warning("鏆傛棤鏁版嵁!");
+      }
+    }
   },
   mounted() {
     this.measureData = new Map();
diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index 54ee232..c9d2169 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -546,6 +546,23 @@
             img_layer.show = checked;
           }
         }
+        //瀛樺偍閫変腑鍥惧眰
+        let checkedLayers = JSON.parse(sessionStorage.getItem("checkedLayers"));
+        if (checked && data.url){
+          checkedLayers.push(data);
+        }
+        else {
+          for (let i = 0; i < checkedLayers.length; i++) {
+            let item = checkedLayers[i];
+            if (item.enName == data.enName){
+              checkedLayers.splice(i,1);
+            }
+          }
+        }
+        sessionStorage.setItem("checkedLayers",JSON.stringify(checkedLayers));
+        setTimeout(() => {
+          this.$bus.$emit("treeChanged", true);
+        }, 500)
       } else if (data.serveType == "WFS") {
         if (window.Viewer.dataSources._dataSources.length == 0) {
           this.setAddLayers(data);
@@ -722,6 +739,7 @@
       var std = data.result;
       var that = this;
       var checkKey = [];
+      let checkedLayers = [];
       var val = std.filter((str) => {
         if (str.type == 1) {
           return str;
@@ -730,11 +748,16 @@
           if (str.isShow == 1) {
             checkKey.push(str.id);
             that.setAddLayers(str);
+            if (str.serveType == "WMS" && str.url){
+              checkedLayers.push(str);
+            }
           }
           return str;
         }
       });
 
+      //瀛樺偍閫変腑鍥惧眰
+      sessionStorage.setItem("checkedLayers",JSON.stringify(checkedLayers));
       var res = this.setTreeData(val);
 
       for (var i in res) {
diff --git a/src/views/Tools/queryinfo.vue b/src/views/Tools/queryinfo.vue
index 8f64077..24277e1 100644
--- a/src/views/Tools/queryinfo.vue
+++ b/src/views/Tools/queryinfo.vue
@@ -12,10 +12,10 @@
     >
       <div>
         <div style="width:940px;height:400px;">
-
           <map-menu-pop v-if="$store.state.mapPopBoxFlag == '1'" />
           <map-space-pop v-if="$store.state.mapPopBoxFlag == '2'" />
           <pipe-line-analy v-if="$store.state.mapPopBoxFlag == '3'" />
+          <map-pick-up-pop v-if="$store.state.mapPopBoxFlag == '4'" />
         </div>
       </div>
     </Popup>
@@ -26,6 +26,7 @@
 import Popup from './Popup.vue';
 import mapMenuPop from '../../components/MapView/mapMenuPop.vue';
 import mapSpacePop from '../../components/MapView/mapSpacePop.vue';
+import mapPickUpPop from '../../components/MapView/mapPickUpPop';
 import pipeLineAnaly from './pipeLineAnaly.vue'
 export default {
   name: 'queryinfo',
@@ -34,7 +35,8 @@
     Popup,
     mapMenuPop,
     mapSpacePop,
-    pipeLineAnaly
+    pipeLineAnaly,
+    mapPickUpPop
   },
   data() {
     return {
@@ -116,4 +118,4 @@
 };
 </script>
 
- 
+

--
Gitblit v1.9.3