From e285f391c74460d4a3e093e9d8f349c70b37bb6d Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期六, 25 三月 2023 16:55:16 +0800
Subject: [PATCH] 发布管理,模型挂附件功能修改,模型编辑功能修改,模型挂附件页面添加地下模式功能;官网一张图漫游效果修改,图层管理功能优化

---
 public/SmartEarthSDK/Workers/path/ProjectPath.html |    2 
 src/components/Screen/bottom.vue                   |    6 
 src/views/exportMap/index.vue                      |   16 +-
 src/views/Tools/LayerTree.vue                      |    1 
 src/components/preview_map.vue                     |  205 +++++++++++++++++++++++++++++-----
 src/views/Tools/ModelProperty.vue                  |    8 +
 src/components/mapsdk.vue                          |   50 +++++++-
 src/components/Screen/ProjectTree.vue              |   20 +-
 8 files changed, 247 insertions(+), 61 deletions(-)

diff --git a/public/SmartEarthSDK/Workers/path/ProjectPath.html b/public/SmartEarthSDK/Workers/path/ProjectPath.html
index e81bd29..ffaa6e2 100644
--- a/public/SmartEarthSDK/Workers/path/ProjectPath.html
+++ b/public/SmartEarthSDK/Workers/path/ProjectPath.html
@@ -249,7 +249,7 @@
         var fly = null;
         var sgworld = parent.sgworld;
         var routeData = parent.PathAnimationData.flyData;
-        var url = parent.SmartEarthRootUrl + "Workers/Model/xiaoche.glb";
+        var url = parent.SmartEarthRootUrl + "Workers/Model/model.glb";
         $('#start').hide();
         $('#stop').show();
         var form, element, slider;
diff --git a/src/components/Screen/ProjectTree.vue b/src/components/Screen/ProjectTree.vue
index 05e9259..0402085 100644
--- a/src/components/Screen/ProjectTree.vue
+++ b/src/components/Screen/ProjectTree.vue
@@ -18,7 +18,6 @@
         :data="treeData"
         show-checkbox
         node-key="id"
-        default-expand-all
         :props="defaultProps"
         ref="tree"
         class="el-tree"
@@ -138,6 +137,7 @@
         std.push(3);
         this.$refs.tree.setCheckedKeys(std)
       }
+      this.getWMSLayer();
 
     },
     async addImageLayer() {
@@ -165,15 +165,9 @@
           return str;
         }
       })
-
-
-
       this.$refs.tree.setCheckedKeys(checkKey)
       var res = this.setTreeData(val);
-
       this.treeData = res
-
-
       this.setShowImageLayer(value)
     },
     setTreeData(source) {
@@ -215,7 +209,6 @@
       // }
 
 
-
       if (data.type == 1) {
         this.childOption = [];
         this.getchilds(data);
@@ -241,13 +234,13 @@
 
           }
         }
-        this.setShowWMSLayer(listWMS);
+        this.getWMSLayer();
         this.setShowTilesetLayer(listTileset);
         this.setShowMptLayer(listMpt);
         this.setShowTMSLayer(listTMS);
       } else if (data.type == 2) {
         if (data.serveType == "WMS") {
-          this.setShowWMSLayer([data]);
+          this.getWMSLayer();
         } else if (data.serveType == "Tileset") {
           this.setShowTilesetLayer([data]);
         } else if (data.serveType == "Mpt") {
@@ -494,6 +487,7 @@
     setShowWMSLayer(res) {
       var url = [];
       this.setClearWmsLayer();
+
       for (var i in res) {
         if (res[i].url) {
           url.push(res[i].url)
@@ -601,6 +595,12 @@
     margin: 10px;
     height: 85%;
     overflow-y: auto;
+    /deep/ .tree-label {
+      color: #eee !important;
+    }
+    /deep/ .el-tree {
+      color: #eee !important;
+    }
   }
   .changeBaseLayer {
     width: 100%;
diff --git a/src/components/Screen/bottom.vue b/src/components/Screen/bottom.vue
index 3f9805e..0a1b2c1 100644
--- a/src/components/Screen/bottom.vue
+++ b/src/components/Screen/bottom.vue
@@ -208,8 +208,10 @@
   },
   computed: {
     currMenuList() {
+
       const menu = this.menuList.find(item => item.menuName == this.currMenu)
       const filterChildren = []
+
       const value = this.searchName
       menu.children.forEach(item => {
         if (item.name && item.name.includes(value)) {
@@ -281,7 +283,7 @@
       }
     },
     handleMenuClick(menu) {
-
+      debugger
       this.currMenu = menu.menuName
     },
     handlePopoverClick(child) {
@@ -407,7 +409,9 @@
     async getCountProjectTour() {
       const res = await countProjectTour()
       if (res.code === 200) {
+
         const menu = this.menuList.find(item => item.menuName == "宸ョ▼宸¤")
+
         menu.children = res.result.map(item => {
           return {
             name: item.projname,
diff --git a/src/components/mapsdk.vue b/src/components/mapsdk.vue
index 34decec..ac9f321 100644
--- a/src/components/mapsdk.vue
+++ b/src/components/mapsdk.vue
@@ -656,7 +656,9 @@
   select_Comprehensive_ByPageAndCount,
   select_Comprehensive_SelectWktById,
   comprehensive_selectRoute,
-  dataLib_selectFiles, dataQuery_selectFields, dataQuery_selectDomains, dataQuery_selectByPage
+  dataLib_selectFiles, dataQuery_selectFields, dataQuery_selectDomains,
+  dataQuery_selectByPage,
+  comprehensive_selectPubById, comprehensive_selectModelByGuid
 } from '../api/api'
 import { getToken } from '@/utils/auth'
 
@@ -817,18 +819,50 @@
               window.pickedFeature.color = Cesium.Color.RED.withAlpha(0.3);
 
               // this.$store.state.catModel = true;
-              that.$store.state.catModelInfo = {
-                id: pickedFeature.getProperty("id"),
-                name: pickedFeature.getProperty("name"),
-                layerId: pickedFeature.primitive.layerId,
-                layerName: pickedFeature.primitive.id
-              };
-              that.$refs && that.$refs.modelProperty && that.$refs.modelProperty.open();
+
+              that.setModelInfoData(window.pickedFeature);
             }
           }
         }
       }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
     },
+    async setModelInfoData(result) {
+      var modelKey = 'id'
+      if (result.tileset.pubid > 0) {
+        const data = await comprehensive_selectPubById({ id: result.tileset.pubid })
+        if (data.code != 200) {
+          return
+        } else {
+
+          modelKey = JSON.parse(data.result.json).modelid
+        }
+        if (!modelKey) {
+          return this.$message('娌℃湁妯″瀷涓婚敭ID,鏃犳硶鏌ヨ鏁版嵁');
+        }
+      }
+      var that = this
+
+      var obj = {
+        layerid: pickedFeature.primitive.layerId,
+        modelid: pickedFeature.getProperty(modelKey)
+      }
+      const data1 = await comprehensive_selectModelByGuid(obj);
+      if (data1.code != 200) {
+        return;
+      }
+      that.$store.state.catModelInfo = {
+        id: pickedFeature.getProperty(modelKey),
+        name: data1.result.name,
+        type: data1.result.type,
+        bak: data1.result.bak,
+        layerId: pickedFeature.primitive.layerId,
+        layerName: pickedFeature.primitive.id
+      };
+      that.$refs && that.$refs.modelProperty && that.$refs.modelProperty.open();
+
+    },
+
+
     drawTerrainLevel() {
       this.clearTerrainLevel()
       var deep = parseFloat(this.terrainFrom.height)
diff --git a/src/components/preview_map.vue b/src/components/preview_map.vue
index e135114..3defe49 100644
--- a/src/components/preview_map.vue
+++ b/src/components/preview_map.vue
@@ -8,18 +8,29 @@
       v-if="modelLayer"
       class="modelLayer box_divm"
     >
-      <el-tree
-        :data="treeData"
-        show-checkbox
-        node-key="id"
-        ref="tree"
-        :default-expanded-keys="[2, 3]"
-        :default-checked-keys="[5]"
-        :props="defaultProps"
-        @node-click="handleNodeClick"
-        @check="handleCheckChange"
-      >
-      </el-tree>
+      <div class="modelBox">
+        <div
+          style="float:right"
+          :title="$t('synthesis.undergroundMode')"
+          @click="setUndergroundMode"
+        >
+          <i class="el-icon-sunrise "></i>
+        </div>
+      </div>
+      <div class="modelBox">
+        <el-tree
+          :data="treeData"
+          show-checkbox
+          node-key="id"
+          ref="tree"
+          :default-expanded-keys="[2, 3]"
+          :default-checked-keys="[5]"
+          :props="defaultProps"
+          @node-click="handleNodeClick"
+          @check="handleCheckChange"
+        >
+        </el-tree>
+      </div>
     </div>
     <div
       v-if="editModelFlag"
@@ -54,9 +65,15 @@
             閲嶈浇
           </el-button>
           <el-button
+            v-if="modelForm.modelid == null"
+            size="small"
+            @click="getModeKeyId"
+          >妯″瀷涓婚敭</el-button>
+          <el-button
             size="small"
             @click="resave"
           >淇濆瓨</el-button>
+
         </el-form-item>
         <el-form-item label="缁忓害:">
           <el-input
@@ -339,6 +356,37 @@
 
       </div>
     </el-dialog>
+    <div
+      v-show="modelKeyFlag"
+      class="modelLayer box_divm"
+      v-drag
+    >
+      <el-form
+        ref="form"
+        :model="modelForm"
+        label-width="80px"
+      >
+        <el-form-item label="涓婚敭ID">
+          <el-select v-model="modelLayerId">
+            <el-option
+              v-for="item in optionKey"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            type="primary"
+            size="small"
+            @click="setSureKeyModelKey"
+          >{{$t('common.confirm')}}</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <undergroundModel ref="undergroundModel" />
   </div>
 </template>
 
@@ -354,7 +402,12 @@
   comprehensive_selectPubById
 } from '../api/api.js';
 import { getToken } from '@/utils/auth';
+import undergroundModel from '../views/Tools/undergroundModel.vue'
+
 export default {
+  components: {
+    undergroundModel
+  },
   data() {
     return {
       levelArray: [
@@ -420,20 +473,35 @@
         lat: 39,
         height: 0,
         yaw: 0,
-        alpha: 1
+        alpha: 1,
+        modelid: null,
       },
       app: {
         tileset: null,
         isBusy: false,
         under: false,
         handler: null
-      }
+      },
+      modelLayerId: null,
+      optionKey: [],
+      modelKeyFlag: false,
     }
   },
   mounted() {
     this.init3DMap();
   },
   methods: {
+    setUndergroundMode() {
+      if (window.UndergroundMode) {
+        this.$refs &&
+          this.$refs.undergroundModel &&
+          this.$refs.undergroundModel.close();
+      } else {
+        this.$refs &&
+          this.$refs.undergroundModel &&
+          this.$refs.undergroundModel.open("鍦颁笅妯″紡", null,);
+      }
+    },
     refreshAttatchDetail() {
       this.dialog.src = "";
       this.dialog.dialogVisible = false;
@@ -581,7 +649,7 @@
       this.formInline.title = this.formInline.name
       that.dialogVisible = true;
 
-
+      this.startModelData();
     },
     async InsertData() {
       var std = {
@@ -605,7 +673,7 @@
       that.dialogVisible = false;
       this.formInline.title = this.formInline.name
       that.dialogVisible = true;
-
+      this.startModelData();
 
 
 
@@ -622,13 +690,30 @@
         bak: '',
         Id: ''
       }
+      this.activeName = "first"
     },
 
-    setShowModelInfo(result) {
+    async setShowModelInfo(result) {
+      var modelKey = 'id';
 
-      this.formInline.title = result.getProperty("name")
-      this.formInline.Id = result.getProperty("id");
-      this.layerID = result.getProperty("id");
+      if (result.tileset.pubid > 0) {
+        const data = await comprehensive_selectPubById({ id: result.tileset.pubid })
+        if (data.code != 200) {
+          return
+        } else {
+
+          modelKey = JSON.parse(data.result.json).modelid
+        }
+        if (!modelKey) {
+          return this.$message('娌℃湁妯″瀷涓婚敭ID,鏃犳硶鏌ヨ鏁版嵁');
+        }
+      }
+
+
+
+      // this.formInline.title = result.getProperty("name")
+      this.formInline.Id = result.getProperty(modelKey);
+      this.layerID = result.getProperty(modelKey);
       this.formInline.layerId = result.primitive.layerId;
       this.formInline.layerName = result.primitive.id;
       this.startModelData();
@@ -697,6 +782,7 @@
         tileset.readyPromise.then((tileset) => {
           tileset.id = res.cnName;
           tileset.layerId = res.id;
+          tileset.pubid = res.pubid;
           that.getArgsTileset(tileset, res);
         });
       }
@@ -825,7 +911,6 @@
           this.app.tileset = this.createTileset(res);
           var that = this;
           Viewer.scene.primitives.add(this.app.tileset).readyPromise.then(function (ts) {
-
             that.setModleLocatin()
             Viewer.flyTo(ts);
           });
@@ -842,7 +927,26 @@
         }
       }
     },
+    getModeKeyId() {
+      window.ModeKeyIdHandler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
+      window.ModeKeyIdHandler.setInputAction((event) => {
+
+        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) {
+
+              this.setModeLayerID(pickedFeature);
+            }
+          }
+        }
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
+    },
+
     async resave() {
+      if (!this.modelForm.modelid) {
+        return this.$message('鏈�夋嫨妯″瀷涓婚敭ID');
+      }
       this.$store.state.previewLayer.json = JSON.stringify(this.modelForm);
 
       const data = await publish_update(this.$store.state.previewLayer);
@@ -980,15 +1084,37 @@
       if (this.modelType.indexOf(type) != -1) {
         this.setEditModelLayer(res)
       }
+
+    },
+    setModeLayerID(res) {
+
+      var value = res.getPropertyNames();
+      var std = [];
+      for (var i in value) {
+        std.push({
+          value: value[i],
+          label: value[i]
+        })
+      }
+      this.optionKey = std;
+      this.modelLayerId = this.optionKey[0].label;
+      this.modelKeyFlag = true;
+    },
+    setSureKeyModelKey() {
+      this.modelKeyFlag = false;
+      this.modelForm.modelid = this.modelLayerId
+      window.ModeKeyIdHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); //绉婚櫎浜嬩欢
     },
     getTilesetArgs() {
       this.app.isBusy = true;
       var cm = this.app.tileset._root.transform;
       var cartesian = new Cesium.Cartesian3(cm[12], cm[13], cm[14]);
       var carto = Cesium.Cartographic.fromCartesian(cartesian);
-      this.modelForm.lon = Cesium.Math.toDegrees(carto.longitude).toFixed(7);
-      this.modelForm.lat = Cesium.Math.toDegrees(carto.latitude).toFixed(7);
-      this.modelForm.height = carto.height.toFixed(3);
+      if (carto) {
+        this.modelForm.lon = Cesium.Math.toDegrees(carto.longitude).toFixed(7);
+        this.modelForm.lat = Cesium.Math.toDegrees(carto.latitude).toFixed(7);
+        this.modelForm.height = carto.height.toFixed(3);
+      }
       this.app.isBusy = false;
     },
 
@@ -1011,15 +1137,18 @@
         this.treeData = res;
         this.modelLayer = true;
         var that = this;
+        var pickedFeature, 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);
+          if (pickedColor) { pickedFeature && (pickedFeature.color = pickedColor); }
+
+          pickedFeature = sgworld.Viewer.scene.pick(event.position);
+          if (Cesium.defined(pickedFeature)) {
+            if (pickedFeature.primitive instanceof Cesium.Cesium3DTileset) {
+              if (pickedFeature && pickedFeature.getProperty) {
+                pickedColor = pickedFeature.color
+                pickedFeature.color = Cesium.Color.RED.withAlpha(0.3);
+
                 that.setShowModelInfo(pickedFeature);
               }
             }
@@ -1076,11 +1205,25 @@
     margin: 10px;
     max-height: 600px;
     overflow: auto;
+    .modelBox {
+      width: 100%;
+      min-height: 24px;
+    }
   }
   .pdfClass {
     height: 70vh;
     width: 100%;
     position: relative;
   }
+  .el-icon-sunrise {
+    background: url("../assets/img/synthesis/images/3鐧藉簳_157.png") center
+      center no-repeat;
+    background-size: 24px;
+  }
+
+  .el-icon-sunrise:before {
+    content: "11";
+    visibility: hidden;
+  }
 }
 </style>
\ No newline at end of file
diff --git a/src/views/Tools/LayerTree.vue b/src/views/Tools/LayerTree.vue
index 84e312d..46d721d 100644
--- a/src/views/Tools/LayerTree.vue
+++ b/src/views/Tools/LayerTree.vue
@@ -837,6 +837,7 @@
         tileset.readyPromise.then((tileset) => {
           tileset.id = res.cnName;
           tileset.layerId = res.id;
+          tileset.pubid = res.pubid;
           this.getTilesetArgs(tileset, res);
           // 
 
diff --git a/src/views/Tools/ModelProperty.vue b/src/views/Tools/ModelProperty.vue
index f6ca6cf..d071ad3 100644
--- a/src/views/Tools/ModelProperty.vue
+++ b/src/views/Tools/ModelProperty.vue
@@ -130,7 +130,7 @@
 <script>
 
 import Popup from "./Popup";
-import { comprehensive_selectFiles } from '../../api/api.js'
+import { comprehensive_selectFiles, comprehensive_selectModelByGuid } from '../../api/api.js'
 import { getToken } from "@/utils/auth";
 
 export default {
@@ -182,13 +182,17 @@
       !isCloseBtn && this.$refs.pop.close();
     },
     // 鎵撳紑寮圭獥
-    open() {
+    async open() {
 
       this.close(true);
+
       this.$refs.pop.open();
       this.title = this.$store.state.catModelInfo.name;
+
       this.formInline = this.$store.state.catModelInfo;
+
     },
+
     // changeToken(token) {
     //   this.mapCollection.tokne = token;
     // },
diff --git a/src/views/exportMap/index.vue b/src/views/exportMap/index.vue
index 724c6b6..67f5c99 100644
--- a/src/views/exportMap/index.vue
+++ b/src/views/exportMap/index.vue
@@ -694,14 +694,14 @@
           url: "http://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=6",
         }),
       })
-      var GaoDeTitle = new TileLayer({
-        source: new XYZ({
-          url: "http://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8",
-        }),
-      })
+      // var GaoDeTitle = new TileLayer({
+      //   source: new XYZ({
+      //     url: "http://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8",
+      //   }),
+      // })
       window.mapView = new Map({
         target: "mapView",
-        layers: [TiandiLayer, GaoDeLayer, GaoDeTitle],
+        layers: [TiandiLayer, GaoDeLayer],
         view: new View({
           center: transform([105.02, 34.9], "EPSG:4326", "EPSG:3857"),
           zoom: 4,
@@ -722,11 +722,11 @@
     setLayerVisible() {
       if (this.isActive == true) {
         mapView.getLayers().item(1).setVisible(false)
-        mapView.getLayers().item(2).setVisible(false)
+        // mapView.getLayers().item(2).setVisible(false)
         mapView.getLayers().item(0).setVisible(true)
       } else {
         mapView.getLayers().item(1).setVisible(true)
-        mapView.getLayers().item(2).setVisible(true)
+        // mapView.getLayers().item(2).setVisible(true)
         mapView.getLayers().item(0).setVisible(false)
       }
     },

--
Gitblit v1.9.3