From 6fe940335b9ca7f4640983929b070c00e401dc61 Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期四, 09 三月 2023 09:48:14 +0800
Subject: [PATCH] 综合展示点击模型显示详细信息

---
 src/api/api.js                         |   29 +
 src/assets/lang/zh.js                  |    2 
 src/views/Archive/index.vue            |    9 
 src/views/Tools/LayerTree.vue          |   42 ++
 src/store/index.js                     |    6 
 src/views/Tools/terrainDig.vue         |   30 +
 src/views/Synthesis/LeftMenu.vue       |  494 ++++++++++++++++++++++++++++--
 src/views/Tools/ModelAttach.vue        |   94 +++++
 src/assets/lang/en.js                  |    2 
 src/components/mapsdk.vue              |   73 +++-
 src/views/Tools/ModelLayer.vue         |  147 +++++++++
 src/components/MapView/mapSpacePop.vue |    3 
 12 files changed, 853 insertions(+), 78 deletions(-)

diff --git a/src/api/api.js b/src/api/api.js
index 11d50d2..8570a59 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -1029,3 +1029,32 @@
   return request.get('/perms/selectLayers', { params: params });
 }
 
+
+//缁煎悎灞曠ず=>鍒嗛〉鏌ヨ妯″瀷骞惰繑鍥炶褰曟暟
+export function comprehensive_selectModelByPageAndCount(params) {
+  return request.get('/comprehensive/selectModelByPageAndCount', { params: params });
+}
+//缁煎悎灞曠ず=>鏍规嵁Guid鏌ヨ妯″瀷
+export function comprehensive_selectModelByGuid(params) {
+  return request.get('/comprehensive/selectModelByGuid', { params: params });
+}
+
+
+//缁煎悎灞曠ず=>鏍规嵁Guid鏌ヨ妯″瀷
+export function comprehensive_selectFiles(params) {
+  return request.get('/comprehensive/selectFiles', { params: params });
+}
+
+
+//缁煎悎灞曠ず=>鏍规嵁Guid鏌ヨ妯″瀷
+export function comprehensive_deletes(params) {
+  return request.get('/comprehensive/deletes', { params: params });
+}
+//缁煎悎灞曠ず=>鎻掑叆涓�涓ā鍨�
+export function comprehensive_insertModel(params) {
+  return request.post('/comprehensive/insertModel', params);
+}
+
+
+
+
diff --git a/src/assets/lang/en.js b/src/assets/lang/en.js
index af1fa08..ab03399 100644
--- a/src/assets/lang/en.js
+++ b/src/assets/lang/en.js
@@ -52,6 +52,8 @@
     title: 'Title',
     preview: 'preview',
     attribute: 'Attribute',
+    id: "ID",
+    info: 'Info'
   },
 
   dataManage: {
diff --git a/src/assets/lang/zh.js b/src/assets/lang/zh.js
index aae2e2a..76b35f8 100644
--- a/src/assets/lang/zh.js
+++ b/src/assets/lang/zh.js
@@ -52,6 +52,8 @@
     title: '鏍囬',
     preview: '棰勮',
     attribute: '灞炴��',
+    id: "ID",
+    info: '淇℃伅'
   },
   dataManage: {
     dataManage: '鏁版嵁绠$悊',
diff --git a/src/components/MapView/mapSpacePop.vue b/src/components/MapView/mapSpacePop.vue
index fc5f70a..0d9ab37 100644
--- a/src/components/MapView/mapSpacePop.vue
+++ b/src/components/MapView/mapSpacePop.vue
@@ -284,6 +284,9 @@
     //鍒濆鍖栨煡璇㈡潯浠�
     showSpacePopLayer() {
       let val_date = this.optionx[0]
+      if (val_date == null || val_date == undefined) {
+        return
+      }
       this.formInline.name = val_date.field
       this.options = []
       var std = []
diff --git a/src/components/mapsdk.vue b/src/components/mapsdk.vue
index 14c3520..0cc288b 100644
--- a/src/components/mapsdk.vue
+++ b/src/components/mapsdk.vue
@@ -351,7 +351,7 @@
       >
         <el-card class="box-card">
           <div slot="header">
-            <span>{{$store.state.propertiesName.tabDesc || '灞炴�т俊鎭�'}}</span>
+            <span>灞炴�т俊鎭�</span>
             <div style="float: right; cursor: pointer">
               <el-link
                 type="primary"
@@ -404,6 +404,7 @@
 
         </el-card>
       </div>
+
       <!--闄勪欢鍒楄〃寮圭獥-->
       <el-dialog
         title="闄勪欢鍒楄〃"
@@ -622,8 +623,37 @@
     this.$bus.$on('changemapType', (e) => {
       this.show2DMap = e;
     });
+    //妯″瀷鎹曟崏
+    this.catchmodel()
   },
   methods: {
+
+    catchmodel() {
+      var that = this;
+      window.pickedFeature;
+      window.pickedColor;
+      window.modeCatchHandler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
+      window.modeCatchHandler.setInputAction((event) => {
+        window.pickedFeature && (window.pickedFeature.color = window.pickedColor);
+        window.pickedFeature = sgworld.Viewer.scene.pick(event.position);
+        if (Cesium.defined(window.pickedFeature)) {
+          if (window.pickedFeature.primitive instanceof Cesium.Cesium3DTileset) {
+            if (window.pickedFeature && window.pickedFeature.getProperty) {
+              window.pickedColor = window.pickedFeature.color
+              window.pickedFeature.color = Cesium.Color.RED.withAlpha(0.3);
+
+              this.$store.state.catModel = true;
+              this.$store.state.catModelInfo = {
+                id: pickedFeature.getProperty("id"),
+                name: pickedFeature.getProperty("name"),
+                layerId: pickedFeature.primitive.layerId,
+                layerName: pickedFeature.primitive.id
+              };
+            }
+          }
+        }
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
+    },
     drawTerrainLevel() {
       this.clearTerrainLevel()
       var deep = parseFloat(this.terrainFrom.height)
@@ -680,13 +710,13 @@
           url: gaoDeBaseUrl[1].url,
         })
       );
-      this.layer3 = Viewer.imageryLayers.addImageryProvider(
-        new Cesium.UrlTemplateImageryProvider({
-          url: gaoDeBaseUrl[2].url,
-        })
-      );
+      // this.layer3 = Viewer.imageryLayers.addImageryProvider(
+      //   new Cesium.UrlTemplateImageryProvider({
+      //     url: gaoDeBaseUrl[2].url,
+      //   })
+      // );
 
-      window.ImageLayer3 = this.layer3;
+      // window.ImageLayer3 = this.layer3;
 
       // for (var i in gaoDeBaseUrl) {
       //   sgworld.Creator.createUrlTemplateImageryProvider(
@@ -755,18 +785,18 @@
     },
     setLayerVisible() {
       if (this.isActive == true) {
-        // Viewer.imageryLayers._layers[1].show = true
-        // Viewer.imageryLayers._layers[2].show = false
+        Viewer.imageryLayers._layers[1].show = true
+        Viewer.imageryLayers._layers[2].show = false
         // Viewer.imageryLayers._layers[3].show = false
 
-        Viewer.imageryLayers.lower(this.layer2);
-        Viewer.imageryLayers.lower(this.layer3);
+        // Viewer.imageryLayers.lower(this.layer2);
+        // Viewer.imageryLayers.lower(this.layer3);
       } else {
-        Viewer.imageryLayers.raise(this.layer3);
-        Viewer.imageryLayers.raise(this.layer2);
+        // Viewer.imageryLayers.raise(this.layer3);
+        // Viewer.imageryLayers.raise(this.layer2);
 
-        // Viewer.imageryLayers._layers[1].show = false
-        // Viewer.imageryLayers._layers[2].show = true
+        Viewer.imageryLayers._layers[1].show = false
+        Viewer.imageryLayers._layers[2].show = true
         // Viewer.imageryLayers._layers[3].show = true
       }
     },
@@ -1200,8 +1230,12 @@
     },
     //鑾峰彇闄勪欢鍒楄〃
     async getAttatchList() {
+      if (this.$store.state.propertiesName == null) {
+        return
+      }
       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,
@@ -1332,6 +1366,7 @@
         padding: 10px 20px;
       }
     }
+
     .terrainLevelBox {
       width: 350px;
       height: 370px;
@@ -1339,14 +1374,6 @@
       position: absolute;
       right: 8%;
       bottom: -11%;
-    }
-    .pathAnalysisBox {
-      width: 412px;
-
-      z-index: 40;
-      position: absolute;
-      right: 8%;
-      bottom: 1%;
     }
 
     .box-card {
diff --git a/src/store/index.js b/src/store/index.js
index 13ef0d6..689fe65 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -62,7 +62,11 @@
     checkedKeys: [],
     queryInfo: [],
     Map3: [],
-    histogramLayer: []
+    histogramLayer: [],
+    attachModel: false,
+    attachinfo: null,
+    catModel: false,
+    catModelInfo: null,
   },
   mutations: {
     //鑾峰彇鏉冮檺鍚堥泦
diff --git a/src/views/Archive/index.vue b/src/views/Archive/index.vue
index 92acf83..9516da4 100644
--- a/src/views/Archive/index.vue
+++ b/src/views/Archive/index.vue
@@ -200,7 +200,8 @@
               <span v-show="formInline.dataType !='type2'">{{item.tabDesc}}</span>
               <div style="float: right; padding: 3px 0">
                 <i
-                  v-show="!showView(item.type) && formInline.dataType=='type2'"
+                  v-show=" formInline.dataType=='type2'"
+                  v-if="showView(item.type) "
                   class="el-icon-view"
                   :title="$t('common.preview')"
                   @click="setAttatchFileView(index, item)"
@@ -1334,7 +1335,11 @@
     },
     showView(name) {
       if (!name) return false
-      return name.indexOf('pdf') || name.indexOf('jpg') != -1 || name.indexOf('gif') != -1 || name.indexOf('png') != -1 || name.indexOf('jpeg') != -1
+      if (name.indexOf('pdf') || name.indexOf('jpg') != -1 || name.indexOf('gif') != -1 || name.indexOf('png') != -1 || name.indexOf('jpeg') != -1) {
+        return true
+      } else {
+        return false
+      }
     },
     //闄勪欢鍒櫎
     async setAttachDel() {
diff --git a/src/views/Synthesis/LeftMenu.vue b/src/views/Synthesis/LeftMenu.vue
index 50c31de..648cb1e 100644
--- a/src/views/Synthesis/LeftMenu.vue
+++ b/src/views/Synthesis/LeftMenu.vue
@@ -16,6 +16,7 @@
     <maplayer ref="maplayer" />
     <queryinfo ref="queryinfo" />
     <terrainDig ref="terrainDig" />
+    <modelAttach ref="modelAttach" />
     <input
       type="file"
       accept=".kml"
@@ -32,6 +33,197 @@
       multiple="multiple"
       @change="handleOpenShp()"
     />
+
+    <el-dialog
+      :title="formInline.title"
+      :visible.sync="dialogVisible"
+      :modal="false"
+      :modal-append-to-body="false"
+      :close-on-click-modal="false"
+      :before-close="handleClose"
+      width="30%"
+    >
+      <el-dialog
+        title="棰勮"
+        :append-to-body="false"
+        :visible.sync="dialog.dialogVisible"
+        width="70%"
+        :modal="false"
+        :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%"
+            :src="dialog.src"
+            alt=""
+          />
+        </div>
+      </el-dialog>
+      <div style="height:63vh">
+        <el-tabs
+          v-model="activeName"
+          @tab-click="handleClick"
+        >
+          <el-tab-pane
+            label="灞炴��"
+            name="first"
+          >
+            <el-form
+              ref="form"
+              :model="formInline"
+              label-width="80px"
+            >
+
+              <el-form-item :label="$t('common.name')">
+                <el-input v-model="formInline.name"></el-input>
+              </el-form-item>
+              <el-form-item :label="$t('common.type')">
+                <el-input v-model="formInline.type"></el-input>
+              </el-form-item>
+              <!-- <el-form-item :label="$t('common.info')">
+                <el-input v-model="formInline.info"></el-input>
+              </el-form-item>
+              <el-form-item label="URL">
+                <el-input v-model="formInline.url"></el-input>
+              </el-form-item>
+              <el-form-item label="Icon">
+                <el-input v-model="formInline.icon"></el-input>
+              </el-form-item> -->
+              <el-form-item :label="$t('common.bak')">
+                <el-input v-model="formInline.bak"></el-input>
+              </el-form-item>
+              <el-form-item>
+                <el-button
+                  v-show="isShowModel"
+                  type="success"
+                  plain
+                  size="small"
+                  @click="InsertData"
+                >{{$t('common.increase')}}</el-button>
+                <el-button
+                  v-show="!isShowModel"
+                  type="info"
+                  plain
+                  size="small"
+                  @click="EditData"
+                >{{$t('common.update')}}</el-button>
+              </el-form-item>
+              </el-form-item>
+            </el-form>
+
+          </el-tab-pane>
+          <el-tab-pane
+            label="闄勪欢"
+            name="second"
+          >
+            <el-table
+              :data="tableData"
+              ref="filterTable"
+              height="calc(100% - 130px)"
+              border
+              style="width: 100%"
+              @selection-change="handleAttatchChange"
+            >
+              <el-table-column
+                type="selection"
+                width="70"
+              />
+              <el-table-column
+                width="60"
+                type="index"
+                :label="$t('common.index')"
+              />
+              <el-table-column
+                prop="name"
+                :label="$t('common.name')"
+              />
+
+              <el-table-column
+                prop="sizes"
+                :label="$t('common.size')"
+                :formatter="statSizeChange"
+              />
+              <el-table-column
+                align="center"
+                :label="$t('common.operate')"
+                min-width="100"
+              >
+                <template slot-scope="scope">
+                  <el-link
+                    v-if="matchState(scope, /[]/)"
+                    @click="setAttatchDetail(scope.$index, scope.row)"
+                    class="elLink"
+                  >{{ $t('common.see') }}</el-link>
+
+                </template>
+              </el-table-column>
+            </el-table>
+
+          </el-tab-pane>
+
+        </el-tabs>
+        <!-- <el-form :model="formInline">
+          <el-form-item>
+            <el-row :gutter="20">
+              <el-col :span="20">
+                <el-input
+                  size="small"
+                  disabled
+                  v-model="formInline.file"
+                ></el-input>
+
+                <input
+                  name="file1"
+                  type="file"
+                  id="insertFile"
+                  multiple="multiple"
+                  style="display: none"
+                  @change="insertFile( )"
+                />
+              </el-col>
+              <el-col :span="4">
+                <el-link
+                  @click="getInsertFile( )"
+                  :underline="false"
+                  icon="el-icon-folder"
+                > </el-link>
+              </el-col>
+            </el-row>
+          </el-form-item>
+          <el-form-item>
+            <el-button
+              @click="setAttachInsert"
+              size="mini"
+              type="primary"
+              plain
+            >娣诲姞</el-button>
+            <el-button
+              type="danger"
+              plain
+              size="mini"
+              @click="setAttachDel"
+            >鍒犻櫎</el-button>
+          </el-form-item>
+        </el-form> -->
+        <!--     @selection-change="handleAttatchChange" -->
+
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -41,6 +233,7 @@
 import maplayer from "../Tools/maplayer.vue";
 import queryinfo from "../Tools/queryinfo.vue";
 import terrainDig from "../Tools/terrainDig.vue";
+import modelAttach from "../Tools/ModelAttach.vue";
 import $ from "jquery";
 import { getToken } from "@/utils/auth";
 import ImageWMS from "ol/source/ImageWMS";
@@ -48,7 +241,14 @@
 import GeoJSON from "ol/format/GeoJSON.js";
 import { Vector as VectorSource } from "ol/source";
 import { Vector as VectorLayer } from "ol/layer";
-import { perms_selectLayers } from '../../api/api.js'
+import {
+  perms_selectLayers,
+  comprehensive_selectModelByGuid,
+  comprehensive_selectFiles,
+  comprehensive_deletes,
+  comprehensive_selectModelByPageAndCount,
+  comprehensive_insertModel
+} from "../../api/api.js";
 import {
   OverviewMap,
   defaults as defaultControls,
@@ -60,7 +260,7 @@
 import { geometry } from "@turf/turf";
 
 export default {
-  components: { mapinfo, maplayer, queryinfo, terrainDig },
+  components: { mapinfo, maplayer, queryinfo, terrainDig, modelAttach },
   data() {
     return {
       showTwoMenuFlag: false,
@@ -424,6 +624,25 @@
       isRouter: false, //璺緞鍒嗘瀽
       isPiple: false, //绠¢亾鍒嗘瀽
       DXZPState: null, //鍦板舰鏁村钩
+      dialogVisible: false,
+      formInline: {
+        title: '',
+        file: '',
+        name: '',
+        type: '',
+        info: '',
+        icon: '',
+        bak: ''
+      },
+      tableData: [],
+      dialog: {
+        dialogVisible: false,
+        isPdf: false,
+        isJpg: false,
+        src: ''
+      },
+      activeName: "first",
+      isShowModel: false,
     };
   },
   methods: {
@@ -440,7 +659,7 @@
       }
 
       if (this.isMenuFlag != val) {
-        if (res.id != 'b9') {
+        if (res.id != "b9") {
           this.$store.state.mapMenuBoolean = false;
           this.$store.state.mapMenuBoxFlag = null;
           this.$store.state.mapPopBoolean = false;
@@ -463,7 +682,6 @@
             this.$store.state.primitLayer = null;
           }
         }
-
       }
       this.showTwoMenuFlag = res.id;
 
@@ -1179,7 +1397,7 @@
           var val = {
             name: "Lengend",
             id: res,
-            vshow: that.isslopeFlag
+            vshow: that.isslopeFlag,
           };
           this.$bus.$emit("mapChangeBox", val);
           window.PDelevationTool = new SmartEarth.ElevationTool(sgworld); //鍏ㄥ眬鍙橀噺
@@ -1193,20 +1411,19 @@
 
           break;
         case "d3": //璺緞鍒嗘瀽
-
           this.isRouter = !this.isRouter;
           let value;
           if (this.isRouter) {
             value = {
               name: "Analysis",
               id: 3,
-              show: true
+              show: true,
             };
           } else {
             value = {
               name: "Analysis",
               id: 3,
-              show: false
+              show: false,
             };
           }
           this.$bus.$emit("mapChangeBox", value);
@@ -1266,7 +1483,7 @@
           var that = this;
           window.model = sgworld.Creator.create3DTilesets(
             "",
-            modelUrl + '/tileset/m/SN/tileset.json',
+            modelUrl + "/tileset/m/SN/tileset.json",
             {},
             {},
             "0",
@@ -1288,7 +1505,9 @@
                 close: () => {
                   if (this.$store.state.pipelineEntity.length != 0) {
                     for (var i in this.$store.state.pipelineEntity) {
-                      sgworld.Viewer.entities.remove(this.$store.state.pipelineEntity[i]);
+                      sgworld.Viewer.entities.remove(
+                        this.$store.state.pipelineEntity[i]
+                      );
                     }
                   }
                 },
@@ -1347,27 +1566,27 @@
           break;
 
         case "d11": //鍦板舰寮�鎸�
-          this.$refs &&
-            this.$refs.terrainDig &&
-            this.$refs.terrainDig.open("绠¢亾绌洪棿鍒嗘瀽", null, {
-              close: () => {
+          // this.$refs &&
+          //   this.$refs.terrainDig &&
+          //   this.$refs.terrainDig.open("绠¢亾绌洪棿鍒嗘瀽", null, {
+          //     close: () => {
 
-              },
-            });
-          // if (window.Excavation) {
-          //   window.Excavation.drawHandler &&
-          //     window.Excavation.drawHandler.destroy();
-          //   Viewer._container.style.cursor = "default";
-          //   window.Excavation.tooltip && window.Excavation.tooltip.show(false);
-          //   window.Excavation.clear();
-          //   window.Excavation = null;
-          // } else {
-          //   window.Excavation = sgworld.Analysis.TerrainExcavation(
-          //     10,
-          //     {},
-          //     function () { }
-          //   );
-          // }
+          //     },
+          //   });
+          if (window.Excavation) {
+            window.Excavation.drawHandler &&
+              window.Excavation.drawHandler.destroy();
+            Viewer._container.style.cursor = "default";
+            window.Excavation.tooltip && window.Excavation.tooltip.show(false);
+            window.Excavation.clear();
+            window.Excavation = null;
+          } else {
+            window.Excavation = sgworld.Analysis.TerrainExcavation(
+              10,
+              {},
+              function () { }
+            );
+          }
           break;
 
         case "d12": //閫氳鍒嗘瀽
@@ -1505,9 +1724,7 @@
       );
     },
     setWander(res) {
-      ;
       switch (res) {
-
         case "c1":
           if (window.PointMY != null) {
             window.PointMY.drawHandler && window.PointMY.drawHandler.destroy();
@@ -1677,7 +1894,7 @@
       }
       this.$store.state.treeData = res;
       // this.$refs.tree.setCheckedKeys(checkKey);
-      this.$store.state.checkedKeys = checkKey
+      this.$store.state.checkedKeys = checkKey;
     },
     setTreeData(source) {
       let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕
@@ -1768,7 +1985,6 @@
         });
         window.map.addLayer(vectorLayer);
       } else if (res.serveType == "Tileset") {
-
         var tileset = Viewer.scene.primitives.add(
           new Cesium.Cesium3DTileset({
             name: res.cnName,
@@ -1782,9 +1998,196 @@
 
         tileset.readyPromise.then(function (tileset) {
           tileset.id = res.cnName;
+          tileset.layerId = res.id;
           Viewer.flyTo(tileset);
         });
       }
+    },
+    showModelAttach() {
+      if (this.$store.state.attachModel) {
+        var name = this.$store.state.attachinfo.cnName;
+        this.$refs &&
+          this.$refs.modelAttach &&
+          this.$refs.modelAttach.open(name, null, {
+            close: () => { },
+          });
+      } else {
+      }
+    },
+    async showModelCatch() {
+      if (this.$store.state.catModel) {
+
+        this.startModelData();
+        this.formInline.title = this.$store.state.catModelInfo.name;
+
+        this.formInline.Id = this.$store.state.catModelInfo.id;
+        this.formInline.LayerName = this.$store.state.catModelInfo.layerName;
+
+        this.activeName = "first"
+        this.getAttacthFlieList();
+        this.dialogVisible = true;
+      } else {
+        this.dialogVisible = false;
+        window.pickedFeature.color = window.pickedColor;
+      }
+    },
+    async startModelData() {
+      var obj = {
+        layerid: this.$store.state.catModelInfo.layerId,
+        pageIndex: 1,
+        pageSize: 10,
+      }
+      const data = await comprehensive_selectModelByPageAndCount(obj);
+      if (data.code != 200) {
+        return;
+      }
+      if (data.count == 0) {
+        this.isShowModel = true;
+        this.formInline.name = this.formInline.title;
+      } else {
+        this.formInline = data.result;
+
+        this.isShowModel = false;
+      }
+    },
+    async InsertData() {
+      const data = await comprehensive_insertModel(this.formInline)
+      debugger
+      this.startModelData();
+
+    },
+    handleClose() {
+      this.$store.state.catModel = false;
+    },
+
+    //闄勪欢鍒楄〃鏂板
+    setAttachInsert() {
+      var token = getToken();
+      var fs = document.getElementById("insertFile");
+      if (fs.files.length == 0) {
+
+        this.$message({
+          message: '璇烽�夋嫨瑕佷笂浼犵殑鏂囦欢锛�',
+          type: 'warning'
+        });
+        return;
+      }
+      const formData = new FormData()
+      for (var i = 0, c = fs.files.length; i < c; i++) {
+
+        formData.append('file', fs.files[i]); // fs.files[i].name,file
+      }
+
+      $.ajax(BASE_URL + "/comprehensive/uploadFiles?token=" + token + "&tabName=lf.sys_style&eventid=" + this.$store.state.catModelInfo.id, {
+        type: "post",
+        data: formData,
+        async: true,
+        cache: false,
+        processData: false,
+        contentType: false,
+        success: (rs) => {
+          this.$message({
+            message: '闄勪欢娣诲姞鎴愬姛',
+            type: 'success'
+          });
+          document.getElementById("insertFile").value = "";
+          this.formInline.file = "";
+          this.getAttacthFlieList();
+        },
+        error: (e) => {
+          document.getElementById("insertFile").value = "";
+          this.formInline.file = "";
+          this.$message.error('闄勪欢娣诲姞澶辫触');
+        }
+      });
+    },
+    //闄勪欢鍒楄〃鏌ヨ 
+    async getAttacthFlieList() {
+      var obj = {
+        eventid: this.$store.state.catModelInfo.id,
+        tabName: "lf.sys_style"
+      };
+      const res = await comprehensive_selectFiles(obj);
+      if (res.code != 200) {
+        this.$message.error('鍒楄〃璋冪敤澶辫触');
+        return
+      }
+      this.tableData = res.result;
+    },
+
+
+    //闄勪欢=>鏂囦欢閫夋嫨
+    getInsertFile() {
+      $('#insertFile').click();
+    },
+    insertFile() {
+      var val = document.getElementById('insertFile').files;
+      if (!val || !val.length) return;
+      this.formInline.file = val[0].name;
+    },
+    statSizeChange(row, column) {
+      return this.stateFormatSizes(row.sizes)
+    },
+    stateFormatSizes(res) {
+      if (res >= 1024) {
+        const val = parseFloat(res / 1024).toFixed(3);
+        return val + ' GB';
+      } else {
+        return res + ' MB';
+      }
+    },
+    matchState(state = "", reg) {
+      var row = state.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;
+    },
+    //闄勪欢鏌ョ湅
+    setAttatchDetail(index, row) {
+      this.refreshAttatchDetail()
+      var name = row.name;
+      if (name.indexOf('.pdf') != -1) {
+        this.dialog.dialogVisible = true;
+        this.dialog.isPdf = true;
+        var url = BASE_URL + "/comprehensive/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 + "/comprehensive/downloadForView?guid=" + row.guid + "&token=" + getToken();
+        this.dialog.src = url
+      }
+    },
+    handleClick(tab, event) {
+      if (tab.name == "second") {
+        this.getAttacthFlieList();
+      }
+    },
+    //闄勪欢鍒櫎
+    async setAttachDel() {
+      var std = [];
+      for (var i in this.attacgSelection) {
+        std.push(this.attacgSelection[i].id);
+      }
+
+      const res = await comprehensive_deletes({ ids: std.toString() });
+      if (res.code != 200) {
+        this.$message.error('鏂囦欢鍒犻櫎澶辫触');
+      }
+      this.getAttacthFlieList();
+    },
+    // 闄勪欢=>琛ㄦ牸閫夋嫨
+    handleAttatchChange(val) {
+      this.attacgSelection = val;
     },
   },
   mounted() {
@@ -1808,8 +2211,23 @@
     this.$store.state.treeData = null;
     this.$store.state.checkedKeys = [];
     // this.setCoverage("a1");
-    this.layersStart()
-
+    this.layersStart();
+  },
+  watch: {
+    Obj(newVal, oldVal) {
+      this.showModelAttach();
+    },
+    catch(newVal, oldVal) {
+      this.showModelCatch();
+    },
+  },
+  computed: {
+    Obj() {
+      return this.$store.state.attachModel;
+    },
+    catch() {
+      return this.$store.state.catModel;
+    },
   },
 };
 </script>
@@ -1857,5 +2275,9 @@
     height: 30px;
     display: inline-block;
   }
+  .pdfClass {
+    height: 63vh;
+    width: 100%;
+  }
 }
 </style>
diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index a57be67..47ba4f6 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -17,6 +17,7 @@
       @check-change="handleCheckChange"
       :default-checked-keys="handleTreeCheck"
       :expand-on-click-node="false"
+      :filter-node-method="filterNode"
     >
       <span
         class="slot-t-node"
@@ -92,6 +93,13 @@
         v-show="shwoHistogram"
       >
         <i class="el-icon-tickets"></i>&nbsp;&nbsp;閽诲瓟鏌辩姸鍥�
+      </div>
+      <div
+        class="edit"
+        v-show="showModelAttach"
+        @click="modelAttach()"
+      >
+        <i class="el-icon-tickets"></i>&nbsp;&nbsp;妯″瀷灞炴��
       </div>
       <!-- <div
         class="edit"
@@ -196,6 +204,7 @@
       rightClickMenuStyle: {},
       handleTreeCheck: [],
       dialogVisible: false,
+      showModelAttach: false,
       addFormServer: {
         opacity: 100,
         serveType: "WMS",
@@ -225,6 +234,7 @@
     };
   },
   methods: {
+
     //杞瓟鏌辩姸鍥�
     async histogram() {
       this.menuVisible = false
@@ -247,6 +257,13 @@
           },
         });
     },
+    modelAttach() {
+      this.menuVisible = false;
+      this.$store.state.attachinfo = this.currentData;
+      this.$store.state.attachModel = true;
+
+
+    },
     NodeBlur(Node, data) {
       if (data.label.length === 0) {
         this.$message.error("鑿滃崟鍚嶄笉鍙负绌猴紒");
@@ -260,11 +277,7 @@
         });
       }
     },
-    // 鏌ヨ
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.label.indexOf(value) !== -1;
-    },
+
 
     allowDrop(draggingNode, dropNode, type) {
       if (dropNode.data.label === "浜岀骇 3-1") {
@@ -280,6 +293,12 @@
     rightClick(event, object, Node, element) {
       this.currentData = object;
       this.currentNode = Node;
+      this.$store.state.propertiesName = this.currentData;
+      if (this.currentData.serveType == "Tileset") {
+        this.showModelAttach = true;
+      } else {
+        this.showModelAttach = false;
+      }
       if (this.currentData.enName == "s_explorationpoint") {
         this.shwoHistogram = true;
       } else {
@@ -659,13 +678,10 @@
           })
         );
 
-        tileset.readyPromise.then((tileset0) => {
+        tileset.readyPromise.then((tileset) => {
           tileset.id = res.cnName;
-
+          tileset.layerId = res.id;
           this.tileSet(tileset, parseFloat(res.elev))
-
-
-
           Viewer.flyTo(tileset);
         });
       }
@@ -788,6 +804,12 @@
       }
       this.$refs.tree.setCheckedKeys(std);
     },
+    // 鏌ヨ
+    filterNode(value, data) {
+
+      if (!value) return true;
+      return data.cnName.indexOf(value) !== -1;
+    },
   },
   watch: {
     filterText(val) {
diff --git a/src/views/Tools/ModelAttach.vue b/src/views/Tools/ModelAttach.vue
new file mode 100644
index 0000000..159e9b0
--- /dev/null
+++ b/src/views/Tools/ModelAttach.vue
@@ -0,0 +1,94 @@
+<template>
+  <div class="InfoPopup">
+    <Popup
+      ref="pop"
+      v-for="(data, index) in PopupData"
+      :key="data.id"
+      :title="data.title || '灞炴��'"
+      maxHeight="400"
+      @close="close(data.id)"
+      left="calc(90% - 800px)"
+      top="calc(100% - 550px) "
+    >
+
+      <div>
+        <div style="width:300px;height:200px;">
+          <model-layer-vue></model-layer-vue>
+        </div>
+
+      </div>
+    </Popup>
+  </div>
+</template>
+
+<script>
+import ModelLayerVue from './ModelLayer.vue';
+import Popup from './Popup.vue';
+
+export default {
+  name: 'modelAttach',
+
+  components: {
+    Popup,
+    ModelLayerVue,
+
+  },
+  data() {
+    return {
+      // 寮圭獥鏁版嵁
+      PopupData: ['modelAttach'],
+      left: 'calc(100% - 600px)',
+      top: 'calc(100% - 10px)',
+
+
+    };
+  },
+  computed: {},
+  mounted() {
+
+  },
+  methods: {
+
+    // 鍏抽棴鎵�鏈�
+    closeAll() {
+      this.PopupData.forEach((item) => {
+        item.close && item.close();
+      });
+      this.PopupData = [];
+    },
+    // 鍏抽棴寮圭獥
+    close(id) {
+      let index = this.PopupData.findIndex((item) => {
+        return item.id === id;
+      });
+      this.$store.state.attachModel = false;
+    },
+    // 鎵撳紑寮圭獥
+    open(title, value, style = {}) {
+      this.PopupData.push({
+        id: this.createRandomId(),
+        title,
+        value,
+        ...style,
+      });
+      let index = this.PopupData.length - 1;
+      this.$nextTick(() => {
+        this.$refs.pop[index].open();
+      });
+      return this.PopupData[index];
+    },
+    // 闅忔満id
+    createRandomId() {
+      return (
+        (Math.random() * 10000000).toString(16).substr(0, 4) +
+        '-' +
+        new Date().getTime() +
+        '-' +
+        Math.random().toString().substr(2, 5)
+      );
+    },
+  },
+};
+</script>
+
+ 
diff --git a/src/views/Tools/ModelLayer.vue b/src/views/Tools/ModelLayer.vue
new file mode 100644
index 0000000..12a6146
--- /dev/null
+++ b/src/views/Tools/ModelLayer.vue
@@ -0,0 +1,147 @@
+<template>
+  <div class="modelBox">
+    <el-form
+      label-width="80px"
+      :model="formLabelAlign"
+    >
+      <el-form-item :label="$t('common.name')">
+        <el-input v-model="formLabelAlign.name"></el-input>
+      </el-form-item>
+      <el-form-item :label="$t('common.type')">
+        <el-input v-model="formLabelAlign.type"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          v-show="isShow"
+          type="success"
+          plain
+          size="small"
+          @click="InsertData"
+        >{{$t('common.increase')}}</el-button>
+        <el-button
+          v-show="!isShow"
+          type="info"
+          plain
+          size="small"
+          @click="EditData"
+        >{{$t('common.update')}}</el-button>
+      </el-form-item>
+    </el-form>
+    <!-- <el-table
+      :data="tableData"
+      style="width: 100%"
+      height="calc(100% - 50px)"
+    >
+    </el-table> -->
+    <!-- <div
+      class="bottomPage pagination_box"
+      style="margin-top:10px"
+    > -->
+    <!-- <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="listData.pageIndex"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="listData.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="listData.count"
+      >
+      </el-pagination> -->
+    <!-- </div> -->
+
+  </div>
+</template>
+
+<script>
+import { comprehensive_selectModelByPageAndCount, comprehensive_insertModel } from '../../api/api.js'
+export default {
+  data() {
+    return {
+      resinfo: null,
+      tableData: [],
+      listData: {
+        pageIndex: 1,
+        pageSize: 10,
+        layerid: null,
+      },
+      isShow: false,
+      formLabelAlign: {
+        name: '',
+        type: ''
+      }
+
+    }
+  },
+  mounted() {
+    this.startListData();
+    this.setModeCatch();
+  },
+  methods: {
+    async InsertData() {
+      var obj = {
+        modelid: this.resinfo.id,
+        name: this.formLabelAlign.name,
+        type: this.formLabelAlign.type
+      }
+      const data = await comprehensive_insertModel(obj)
+      this.startModelData();
+
+    },
+    EditData() {
+
+    },
+    //妯″瀷鎹曟崏
+    setModeCatch() {
+      var that = this;
+
+    },
+    //鍒嗛〉鍒囨崲
+    handleSizeChange(val) {
+      this.listdata.pageSize = val;
+      this.listData.pageIndex = 1;
+      this.startModelData();
+    },
+    //鍒嗛〉鍒囨崲
+    handleCurrentChange(val) {
+      this.listData.pageIndex = val;
+      this.startModelData();
+    },
+    //鍒濆鍖栨煡璇�
+    startListData() {
+      this.listData = {
+        pageIndex: 1,
+        pageSize: 10,
+        layerid: null,
+      };
+
+      this.resinfo = this.$store.state.attachinfo;
+      this.startModelData();
+    },
+    //鏌ヨ妯″瀷灞炴�ф暟鎹�
+    async startModelData() {
+      if (this.resinfo) {
+        this.listData.layerid = this.resinfo.id;
+
+        const data = await comprehensive_selectModelByPageAndCount(this.listData)
+        if (data.code != 200) {
+          return;
+        }
+        if (data.count == 0) {
+          this.isShow = true;
+        } else {
+          this.isShow = false;
+        }
+
+      }
+    },
+  },
+
+}
+</script>
+
+<style lang="less" scoped>
+.modelBox {
+  width: 100%;
+  height: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/Tools/terrainDig.vue b/src/views/Tools/terrainDig.vue
index 52bcb45..44c0ecd 100644
--- a/src/views/Tools/terrainDig.vue
+++ b/src/views/Tools/terrainDig.vue
@@ -1,7 +1,15 @@
 <template>
-  <Popup ref="pop" :title="form.title" left="calc(100% - 330px)">
+  <Popup
+    ref="pop"
+    :title="form.title"
+    left="calc(100% - 330px)"
+  >
     <div class="terrainDig">
-      <el-form ref="form" :model="form" label-width="100px">
+      <el-form
+        ref="form"
+        :model="form"
+        label-width="100px"
+      >
         <el-form-item label="娣卞害(绫�):">
           <el-input-number
             v-model="form.depth"
@@ -14,7 +22,11 @@
           <el-switch v-model="form.showWall"></el-switch>
         </el-form-item> -->
         <el-form-item>
-          <el-button type="primary" size="mini" @click="dig">缁樺埗</el-button>
+          <el-button
+            type="primary"
+            size="mini"
+            @click="dig"
+          >缁樺埗</el-button>
           <!-- <el-upload
             class="button-group"
             action=""
@@ -50,11 +62,14 @@
     };
   },
   computed: {},
-  mounted() {},
+  mounted() { },
   methods: {
     // 鍏抽棴寮圭獥
     close() {
       this.$refs.pop.close();
+      if (window.Excavation) {
+        window.Excavation.drawHandler.destroy();
+      }
     },
     // 鎵撳紑寮圭獥
     open() {
@@ -68,6 +83,9 @@
     },
     // 鍦板舰寮�鎸�
     dig() {
+      // if (window.Excavation) {
+      //   window.Excavation.drawHandler.destroy();
+      // }
       window.Excavation = sgworld.Analysis.TerrainExcavation(
         this.form.depth,
         {
@@ -95,11 +113,11 @@
             ) {
               degreesArr.splice(length - 3, 3);
             }
-            Excavation = sgworld.Analysis.TerrainExcavation(this.form.depth, {
+            window.Excavation = sgworld.Analysis.TerrainExcavation(this.form.depth, {
               positions: degreesArr,
               showWall: this.form.showWall,
             });
-            this.addToTree(Excavation, degreesArr);
+            // this.addToTree(Excavation, degreesArr);
           });
         this.$message('寮�鎸栧尯鍩熷凡瀵煎叆');
       };

--
Gitblit v1.9.3