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