From 2fae357b20387b35a7cf0768120c2d9297b5fe08 Mon Sep 17 00:00:00 2001
From: 584911253@qq.com <584911253@qq.com>
Date: 星期五, 03 三月 2023 15:52:10 +0800
Subject: [PATCH] 空间查询属性点击事件,附件查看

---
 src/components/MapView/mapSpaceTop.vue |    2 
 src/components/MapView/mapMenuTop.vue  |    4 
 src/components/MapView/mapMenuPop.vue  |   36 ++++++++
 src/components/mapsdk.vue              |  177 ++++++++++++++++++++++++++++++++++++++++++-
 src/components/MapView/mapSpacePop.vue |    2 
 5 files changed, 208 insertions(+), 13 deletions(-)

diff --git a/src/components/MapView/mapMenuPop.vue b/src/components/MapView/mapMenuPop.vue
index d5d9419..ce7b278 100644
--- a/src/components/MapView/mapMenuPop.vue
+++ b/src/components/MapView/mapMenuPop.vue
@@ -546,7 +546,7 @@
           this.imagePoint = null;
         }
         var wkt = this.$wkt.parse(val1);
-        this.setMapLoaction(wkt);
+        this.setMapLoaction(wkt,row);
       }
     },
     setMapLoaction(res) {
@@ -604,6 +604,7 @@
       this.listdata.pageIndex = 1;
       this.listdata.pageSize = 10;
       this.listdata.name = res.entity;
+      this.$store.state.propertiesName = res;
       this.getTableDateHidder();
     },
     handleSizeChange(val) {
@@ -642,6 +643,7 @@
     },
     async showAllImage(res) {
       for (var i in res) {
+        let properties = res[i];
         var param = {
           gid: res[i].gid,
           name: this.listdata.name,
@@ -654,7 +656,7 @@
         if (val1) {
           var wkt = this.$wkt.parse(val1);
           // this.getprimitiLayer(wkt);
-          this.primitivesAddLayer(wkt);
+          this.primitivesAddLayer(wkt,properties);
         }
       }
     },
@@ -667,7 +669,7 @@
           break;
       }
     },
-    primitivesAddLayer(res) {
+    primitivesAddLayer(res,properties) {
       switch (res.type) {
         case "Point":
           var val = Cesium.Cartesian3.fromDegrees(
@@ -676,6 +678,8 @@
           );
           var point = Viewer.entities.add({
             position: val,
+            properties:properties,
+            tag : "properties_point",
             billboard: {
               // 鍥惧儚鍦板潃锛孶RI鎴朇anvas鐨勫睘鎬�
               image: SmartEarthRootUrl + "Workers/image/mark.png",
@@ -694,6 +698,29 @@
           });
           point.billboard.disableDepthTestDistance = Number.POSITIVE_INFINITY;
           this.$store.state.queryInfo.push(point);
+            //鐐瑰嚮浜嬩欢
+          window.propertieshandler = new Cesium.ScreenSpaceEventHandler(
+              sgworld.Viewer.scene.canvas
+          );
+          window.propertieshandler.setInputAction(event => {
+            let pick = sgworld.Viewer.scene.pick(event.position);
+            // debugger;
+            if (pick && pick.id && pick.id.tag == "properties_point") {
+              this.$store.state.propertiesFlag = '1';
+              let properties = pick.id.properties;
+              let propertyNames = pick.id.properties.propertyNames;
+              let obj = {};
+              obj["eventid"] = properties['_eventid']._value;
+              this.attributeData.forEach(item => {
+                propertyNames.forEach(itemElement => {
+                  if (itemElement == item.field){
+                    obj[item.alias] = properties[itemElement]._value
+                  }
+                })
+              })
+              this.$store.state.propertiesInfo = obj;
+            }
+          }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
           break;
         case "LineString":
         case "MultiLineString":
@@ -752,6 +779,9 @@
       }
     });
   },
+  destroyed() {
+    this.$store.state.propertiesFlag = null;
+  }
 };
 </script>
 
diff --git a/src/components/MapView/mapMenuTop.vue b/src/components/MapView/mapMenuTop.vue
index b793550..b5d17dc 100644
--- a/src/components/MapView/mapMenuTop.vue
+++ b/src/components/MapView/mapMenuTop.vue
@@ -343,8 +343,8 @@
     getCheckedNodes() {
       var valTree = this.$refs.tree.getCheckedNodes()
       if (valTree.length == 0) return
-
-      this.menuTopFrom.queryLayer = valTree[0].tabDesc
+      this.menuTopFrom.queryLayer = valTree[0].tabDesc;
+      this.$store.state.propertiesName = valTree[0];
       for (var i = 0; i < valTree.length; i++) {
         if (valTree[i].entity) {
           this.treeChange.push(valTree[i])
diff --git a/src/components/MapView/mapSpacePop.vue b/src/components/MapView/mapSpacePop.vue
index 7ff8102..f00e178 100644
--- a/src/components/MapView/mapSpacePop.vue
+++ b/src/components/MapView/mapSpacePop.vue
@@ -443,6 +443,8 @@
             let properties = pick.id.properties;
             let propertyNames = pick.id.properties.propertyNames;
             let obj = {};
+            obj["eventid"] = properties['_eventid']._value;
+            // debugger
             this.attributeData.forEach(item => {
               propertyNames.forEach(itemElement => {
                 if (itemElement == item.field) {
diff --git a/src/components/MapView/mapSpaceTop.vue b/src/components/MapView/mapSpaceTop.vue
index de3cd91..71d8dfb 100644
--- a/src/components/MapView/mapSpaceTop.vue
+++ b/src/components/MapView/mapSpaceTop.vue
@@ -151,7 +151,7 @@
       this.mapSpaceQueryLayer = value;
       this.layerData.forEach(item => {
         if (this.menuTopFrom.queryLayer == item.entity){
-          this.$store.state.propertiesName = item.tabDesc;
+          this.$store.state.propertiesName = item;
         }
       })
       this.getCheckedNodes();
diff --git a/src/components/mapsdk.vue b/src/components/mapsdk.vue
index ce5fc51..42a1afa 100644
--- a/src/components/mapsdk.vue
+++ b/src/components/mapsdk.vue
@@ -351,8 +351,9 @@
       >
         <el-card class="box-card">
           <div slot="header">
-            <span>{{$store.state.propertiesName}}</span>
+            <span>{{$store.state.propertiesName.tabDesc || '灞炴�т俊鎭�'}}</span>
             <div style="float: right; cursor: pointer">
+              <el-link type="primary" :underline="false" @click="getAttatchList" style="margin-right: 10px">鏌ョ湅闄勪欢</el-link>
               <i
                 class="el-icon-close"
                 @click="closeBufferBox(6)"
@@ -368,12 +369,84 @@
               v-for="(value, key) in $store.state.propertiesInfo"
               :key="key"
             >
-              <span style="font-size: 14px;font-weight: bold;margin-right: 5px">{{key}}:</span>
-              <span>{{value}}</span>
+              <span v-if="key != 'eventid'" style="font-size: 14px;font-weight: bold;margin-right: 5px">{{key}}:</span>
+              <span v-if="key != 'eventid'">{{value}}</span>
             </div>
           </div>
         </el-card>
       </div>
+      <!--闄勪欢鍒楄〃寮圭獥-->
+      <el-dialog
+          title="闄勪欢鍒楄〃"
+          :append-to-body="false"
+          :visible.sync="showAttach"
+          width="30%"
+          :close-on-click-modal="false"
+      >
+        <div>
+          <el-table
+              :data="attachList"
+              height="100%"
+              style="width: 100%"
+              border
+          >
+            <el-table-column
+                align="center"
+                type="index"
+                label="搴忓彿"
+                width="50"
+            />
+            <el-table-column
+                prop="name"
+                label="鍚嶇О"
+                width="150">
+            </el-table-column>
+            <el-table-column
+                prop="createTime"
+                label="鏃堕棿"
+                width="150">
+            </el-table-column>
+            <el-table-column
+                label="鎿嶄綔"
+                width="100">
+              <template slot-scope="scope">
+                <el-button v-if="showAttachDetailBtn(scope.row)" @click="showAttachDetail(scope.row)" type="text" size="small">鏌ョ湅</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </el-dialog>
+      <!--闄勪欢寮圭獥-->
+      <el-dialog
+          title="棰勮"
+          :append-to-body="false"
+          :visible.sync="dialog.dialogVisible"
+          width="70%"
+          :close-on-click-modal="false"
+      >
+        <div
+            v-if="dialog.isPdf"
+            class="pdfClass"
+        >
+          <iframe
+              :src="dialog.src"
+              type="application/x-google-chrome-pdf"
+              width="100%"
+              height="100%"
+          >
+          </iframe>
+        </div>
+        <div
+            v-if="dialog.isJpg"
+            class="pdfClass"
+        >
+          <img
+              style="width:100%; height:100%;background: red"
+              :src="dialog.src"
+              alt=""
+          />
+        </div>
+      </el-dialog>
       <!--      <div-->
       <!--        @click="changeMenulayer"-->
       <!--        class="center CenDiv"-->
@@ -391,13 +464,14 @@
 <script>
 import $ from "jquery";
 import mapMenuTop from "./MapView/mapMenuTop.vue";
-
 import mapSpaceTop from "./MapView/mapSpaceTop.vue";
 import {
   select_Comprehensive_ByPageAndCount,
   select_Comprehensive_SelectWktById,
   comprehensive_selectRoute,
+  dataLib_selectFiles
 } from "../api/api";
+import {getToken} from '@/utils/auth'
 
 export default {
   name: "",
@@ -436,7 +510,6 @@
         lon: "",
         lat: "",
       },
-
       rules: {
         lon: [
           { required: true, message: "璇疯緭鍏ヨ捣鐐圭粡绾害鍧愭爣", trigger: "blur" },
@@ -481,7 +554,6 @@
       layer3: null,
       isActive: false,
       isMenuLayer: true,
-      selFrom: {},
       selectTree: null,
       showTerrainLevelDialog: false,
       menuList: [],
@@ -492,7 +564,16 @@
       show2DMap: false,
       terrainFrom: {
         height: '10'
-      }, showLengendDialog: false,
+      },
+      showLengendDialog: false,
+      showAttach:false,
+      attachList:[],
+      dialog: {
+        dialogVisible: false,
+        isPdf: false,
+        isJpg: false,
+        src: ''
+      }
     };
   },
   mounted() {
@@ -1079,6 +1160,82 @@
       }
       this.$bus.$emit("changemapType", this.show2DMap);
     },
+    //鑾峰彇闄勪欢鍒楄〃
+    async getAttatchList() {
+      let tabName = this.$store.state.propertiesName.ns+'.'+this.$store.state.propertiesName.tab;
+      let eventid = this.$store.state.propertiesInfo.eventid;
+      var obj = {
+        eventid:eventid,
+        tabName:tabName,
+      };
+      const res = await dataLib_selectFiles(obj);
+      if (res.code != 200) {
+        this.$message.error('闄勪欢鏌ヨ澶辫触');
+        return
+      }
+      if (res.result.length <= 0) {
+        this.$message.error('鏆傛棤闄勪欢');
+        return
+      }
+      this.attachList = res.result;
+      this.showAttach = true;
+    },
+    //鏄惁鏄剧ず鏌ョ湅鎸夐挳
+    showAttachDetailBtn(row){
+      var name = row.name;
+      if (name.indexOf('.pdf') != -1 || name.indexOf('.jpg') != -1 || name.indexOf('.gif') != -1 || name.indexOf('.png') != -1 || name.indexOf('.jpeg') != -1) {
+        return true;
+      }
+      return false;
+    },
+    //鏁版嵁鍒濆鍖�
+    refreshAttatchDetail() {
+      this.dialog.src = "";
+      this.dialog.dialogVisible = false;
+      this.dialog.isPdf = false;
+      this.dialog.isJpg = false;
+    },
+    //鏌ョ湅闄勪欢
+    showAttachDetail(row){
+      this.refreshAttatchDetail();
+      var name = row.name;
+      if (name.indexOf('.pdf') != -1) {
+        this.dialog.dialogVisible = true;
+        this.dialog.isPdf = true;
+        var url = BASE_URL + "/res/downloadForView?guid=" + row.guid + "&token=" + getToken();
+        this.dialog.src = url
+      }
+      else if (name.indexOf('.jpg') != -1 || name.indexOf('.gif') != -1 || name.indexOf('.png') != -1 || name.indexOf('.jpeg') != -1) {
+        this.dialog.dialogVisible = true;
+        this.dialog.isJpg = true;
+        var url = BASE_URL + "/res/downloadForView?guid=" + row.guid + "&token=" + getToken();
+        this.dialog.src = url
+      }
+    },
+    //鏍煎紡鍖栨椂闂�
+    format(shijianchuo) {
+      //shijianchuo鏄暣鏁帮紝鍚﹀垯瑕乸arseInt杞崲
+      var time = new Date(shijianchuo);
+      var y = time.getFullYear();
+      var m = time.getMonth() + 1;
+      var d = time.getDate();
+      var h = time.getHours();
+      var mm = time.getMinutes();
+      var s = time.getSeconds();
+      return (
+          y +
+          '-' +
+          this.add0(m) +
+          '-' +
+          this.add0(d) +
+          ' ' +
+          h +
+          ':' +
+          mm +
+          ':' +
+          s
+      );
+    },
   },
 };
 </script>
@@ -1331,6 +1488,12 @@
   background-size: contain;
 }
 
+.pdfClass {
+  height: 70vh;
+  width: 100%;
+  position: relative;
+}
+
 // .menuSelect .el-input__inner {
 //   background: rgba(255, 255, 255, 0.2) !important;
 //   color: white !important;

--
Gitblit v1.9.3