From e8e7b70168d5cc8a465c92da28bdcce52e8bf3cc Mon Sep 17 00:00:00 2001
From: liuyg <liuyg@qq.com>
Date: Thu, 10 Mar 2022 14:48:21 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.105:10010/r/school-web
---
src/components/leftNav/index.vue | 354 ++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 265 insertions(+), 89 deletions(-)
diff --git a/src/components/leftNav/index.vue b/src/components/leftNav/index.vue
index c1be958..afbf3e1 100644
--- a/src/components/leftNav/index.vue
+++ b/src/components/leftNav/index.vue
@@ -1,31 +1,43 @@
<template>
<div class="left-nav">
<ul>
- <li v-for="(item, index) in leftNavData"
- :key="index"
- @click="leftNavClick(item)">
- <img :src="item.img"
- alt="">
- <span>{{item.label}}</span>
+ <li v-for="(item, index) in leftNavData" :key="index" @click="leftNavClick(item)">
+ <img :src="item.img" alt />
+ <span>{{ item.label }}</span>
+ </li>
+ <li class="addIcons" @click="addIcons">
+ <!-- <img :style="[imgStyle]" :src="item.img" alt="" /> -->
+ <span>+</span>
</li>
</ul>
</div>
</template>
<script>
-
-import { getLifeList, getMonitorList, getSceneList, getWayList, getTagList } from '@/api/pc/leftNav/index'
-
+import {
+ getLifeList,
+ getMonitorList,
+ getSceneList,
+ getWayList,
+ getTagList
+} from '@/api/pc/leftNav/index'
+import { mapGetters } from 'vuex'
export default {
name: 'leftNav',
- computed: {},
+ computed: {
+ ...mapGetters([
+ 'viewer',
+ 'closeMapClick', // 关闭地图点击,防止新增标签误触
+ 'addIconsLayerIconPopup' // 传送关闭编辑窗口,刷新标签数据
+ ])
+ },
data () {
return {
leftNavData: [
{
- flag: false,
+ flag: true,
label: '标签',
- img: '/img/leftnav/tag.png',
+ img: '/img/leftnav/tag-checked.png',
normal: '/img/leftnav/tag.png',
checked: '/img/leftnav/tag-checked.png',
layer: 'tagLayer'
@@ -62,14 +74,14 @@
// checked: '/img/leftnav/activity-checked.png',
// layer: 'activityLayer'
// },
- {
- flag: false,
- label: 'AED',
- img: '/img/leftnav/aed.png',
- normal: '/img/leftnav/aed.png',
- checked: '/img/leftnav/aed-checked.png',
- layer: 'aedLayer'
- },
+ // {
+ // flag: false,
+ // label: 'AED',
+ // img: '/img/leftnav/aed.png',
+ // normal: '/img/leftnav/aed.png',
+ // checked: '/img/leftnav/aed-checked.png',
+ // layer: 'aedLayer'
+ // },
{
flag: false,
label: '停车',
@@ -88,7 +100,6 @@
}
],
viewer: null,
- DC: null,
tagLayer: null,
wayLayer: null,
sceneLayer: null,
@@ -100,18 +111,82 @@
}
},
created () {
- this.DC = global.DC
},
mounted () {
-
+ // 初始化新增标签图层
+ // this.$store.commit("createAddIconsLayerIconLayer", { viewer: this.viewer });
+ },
+ watch: {
+ addIconsLayerIconPopup () {
+ if (!this.addIconsLayerIconPopup) {
+ this.reself()
+ }
+ }
},
methods: {
+ reself () {
+ const that = this
+ if (this.tagLayer) {
+ this.tagLayer.clear()
+ }
+ getTagList().then((res) => {
+ res.data.data.forEach((item) => {
+ const divIcon = new global.DC.DivIcon(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
+ `
+ <div class="tag-entitys-box">
+ <div class="tag-content">
+ ${item.mechanismname}
+ </div>
+ <div class="tag-angle-content">
+ <img src="https://map.hit.edu.cn/images/tarrow_xq.png">
+ </div>
+ </div>
+ `
+ )
+ // 订阅事件
+ divIcon.on(global.DC.MouseEventType.CLICK, (e) => {
+ if (that.closeMapClick) {
+ return
+ }
+ that.openPopups({
+ lng: e.overlay.position.lng,
+ lat: e.overlay.position.lat,
+ item: item
+ })
+ })
+ this.tagLayer.addOverlay(divIcon)
+ if (!this.leftNavData[0].flag) {
+ this.tagLayer.show = false
+ }
+ })
+ })
+ },
+ addIcons () {
+ if (this.closeMapClick) {
+ // 若正在加标签,退出
+ return
+ }
+ // 加标签
+ this.$store.dispatch('chouseAddIconsLayerIcon', {
+ // 新增标签 选定位置
+ viewer: this.viewer,
+ fn: (lnglat) => {
+ // 返回选定坐标
+ // 添加空白标签
+ this.$store.dispatch('addIconsLayerIcon', {
+ lnglat: lnglat,
+ viewer: this.viewer
+ })
+ }
+ })
+ },
generatePosition (num) {
const list = []
for (let i = 0; i < num; i++) {
const lng = 115.86271917 + Math.random() * 0.01
const lat = 28.73615593 + Math.random() * 0.02
- list.push(new this.DC.Position(lng, lat, 0))
+ list.push(new global.DC.Position(lng, lat, 0))
}
return list
},
@@ -129,25 +204,25 @@
var that = this
viewer.scene.globe.depthTestAgainstTerrain = false
this.viewer = viewer
- this.tagLayer = new this.DC.HtmlLayer('tagLayer')
+ this.tagLayer = new global.DC.HtmlLayer('tagLayer')
viewer.addLayer(this.tagLayer)
- this.wayLayer = new this.DC.HtmlLayer('wayLayer')
+ this.wayLayer = new global.DC.HtmlLayer('wayLayer')
viewer.addLayer(this.wayLayer)
- this.sceneLayer = new this.DC.HtmlLayer('sceneLayer')
+ this.sceneLayer = new global.DC.HtmlLayer('sceneLayer')
viewer.addLayer(this.sceneLayer)
- this.monitorLayer = new this.DC.HtmlLayer('monitorLayer')
+ this.monitorLayer = new global.DC.HtmlLayer('monitorLayer')
viewer.addLayer(this.monitorLayer)
- this.aedLayer = new this.DC.VectorLayer('aedLayer')
+ this.aedLayer = new global.DC.VectorLayer('aedLayer')
viewer.addLayer(this.aedLayer)
- this.parkLayer = new this.DC.HtmlLayer('parkLayer')
+ this.parkLayer = new global.DC.HtmlLayer('parkLayer')
viewer.addLayer(this.parkLayer)
- this.comeLayer = new this.DC.VectorLayer('comeLayer')
+ this.comeLayer = new global.DC.VectorLayer('comeLayer')
viewer.addLayer(this.comeLayer)
- getTagList().then(res => {
- res.data.data.forEach(item => {
- const divIcon = new this.DC.DivIcon(
- new that.DC.Position(Number(item.jd), Number(item.wd), 0),
+ getTagList().then((res) => {
+ res.data.data.forEach((item) => {
+ const divIcon = new global.DC.DivIcon(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
`
<div class="tag-entitys-box">
<div class="tag-content">
@@ -159,18 +234,30 @@
</div>
`
)
+ // 订阅事件
+ divIcon.on(global.DC.MouseEventType.CLICK, (e) => {
+ if (that.closeMapClick) {
+ return
+ }
+ // console.log(item, "see11111");
+ that.openPopups({
+ lng: e.overlay.position.lng,
+ lat: e.overlay.position.lat,
+ item: item
+ })
+ })
this.tagLayer.addOverlay(divIcon)
})
- this.tagLayer.show = false
+ // this.tagLayer.show = false
})
- getWayList().then(res => {
- res.data.data.forEach(item => {
- const divIcon = new this.DC.DivIcon(
- new that.DC.Position(Number(item.jd), Number(item.wd), 0),
+ getWayList().then((res) => {
+ res.data.data.forEach((item) => {
+ const divIcon = new global.DC.DivIcon(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
`
<div class="way-entitys-box">
- <div class="way-title" style="border: white 1px solid; padding-left: 2px;font-size: 12px; background: #0066ff; width: 12px;line-height: 13px; padding:2px 1px 2px 1px; color:white;">
+ <div class="way-title" style="border: white 1px solid; font-size: 0.875rem; background: #0066ff; width: 18px; line-height: 14px; padding: 6px 2px 6px 2px; color: white; text-align: center;">
${item.roadname}
</div>
<div class="way-sign-box">
@@ -184,32 +271,51 @@
this.wayLayer.show = false
})
- getMonitorList().then(res => {
- res.data.data.forEach(item => {
- console.log(item, 456)
- const divIcon = new this.DC.DivIcon(
- new that.DC.Position(Number(item.jd), Number(item.wd), 0),
+ getMonitorList().then((res) => {
+ res.data.data.records.forEach((item) => {
+ const divIcon = new global.DC.DivIcon(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
`
- <img class="monitor-entitys-box" src="/img/leftnav/map-monitor.png" alt="">
+ <div class="monitor-entitys-box">
+ <div>${item.vrname}</div>
+ <img class="monitor-entitys-box" src="/img/leftnav/map-monitor.png" alt="">
+ </div>
`
)
divIcon.attrParams = item
this.monitorLayer.addOverlay(divIcon)
- divIcon.on(that.DC.MouseEventType.CLICK, e => {
+ divIcon.on(global.DC.MouseEventType.CLICK, (e) => {
+ that.viewer.flyToPosition(
+ new global.DC.Position(Number(item.jd), Number(item.wd), Number(300), Number(0), Number(-90), Number(0)),
+ function () { },
+ 2
+ )
+
this.$store.commit('SET_PANORAMAPOPUP', false)
this.$store.commit('SET_DETAILSPOPUP', false)
- this.$store.commit('SET_STATENAME', e.overlay.attrParams.mechanismname)
- this.$store.commit('SET_MONITORURL', e.overlay.attrParams.videourl)
+ this.$store.commit(
+ 'SET_STATENAME',
+ e.overlay.attrParams.vrname
+ )
+ this.$store.commit('SET_MONITORURL', e.overlay.attrParams.vrurl)
// eslint-disable-next-line new-cap
- var positions = this.DC.Transform.transformWGS84ToCartesian(new this.DC.Position.fromArray([Number(item.jd), Number(item.wd), 0, 0, -90, 0]))
+ var positions = global.DC.Transform.transformWGS84ToCartesian(
+ // eslint-disable-next-line new-cap
+ new global.DC.Position.fromArray([
+ Number(item.jd),
+ Number(item.wd),
+ 0,
+ 0,
+ -90,
+ 0
+ ])
+ )
this.viewer.scene.globe.depthTestAgainstTerrain = false
// eslint-disable-next-line no-unused-vars
- var monitor = new this.DC.PanoramaBox(this.viewer, {
+ var monitor = new global.DC.PanoramaBox(this.viewer, {
domId: 'MonitorBox',
- position: [
- positions
- ]
+ position: [positions]
})
this.$store.commit('SET_MONITORPOPUP', true)
@@ -219,32 +325,54 @@
this.monitorLayer.show = false
})
- getSceneList().then(res => {
- res.data.data.forEach(item => {
- console.log(item, 123)
- const divIcon = new this.DC.DivIcon(
- new that.DC.Position(Number(item.jd), Number(item.wd), 0),
+ getSceneList().then((res) => {
+ res.data.data.records.forEach((item) => {
+ const divIcon = new global.DC.DivIcon(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
`
- <img class="scene-entitys-box" src="/img/leftnav/map-panorama.png" alt="">
+ <div class="scene-entitys-box">
+ <div>${item.vrname}</div>
+ <img src="/img/leftnav/map-panorama.png" alt="">
+ </div>
`
)
divIcon.attrParams = item
this.sceneLayer.addOverlay(divIcon)
- divIcon.on(that.DC.MouseEventType.CLICK, e => {
+ divIcon.on(global.DC.MouseEventType.CLICK, (e) => {
+ that.viewer.flyToPosition(
+ new global.DC.Position(Number(item.jd), Number(item.wd), Number(300), Number(0), Number(-90), Number(0)),
+ function () { },
+ 2
+ )
+
this.$store.commit('SET_DETAILSPOPUP', false)
this.$store.commit('SET_MONITORPOPUP', false)
- this.$store.commit('SET_STATENAME', e.overlay.attrParams.mechanismname)
- this.$store.commit('SET_PANORAMAURL', e.overlay.attrParams.panoramaurl)
+ this.$store.commit(
+ 'SET_STATENAME',
+ e.overlay.attrParams.mechanvrnameismname
+ )
+ this.$store.commit(
+ 'SET_PANORAMAURL',
+ e.overlay.attrParams.vrurl
+ )
// eslint-disable-next-line new-cap
- var positions = this.DC.Transform.transformWGS84ToCartesian(new this.DC.Position.fromArray([Number(item.jd), Number(item.wd), 0, 0, -90, 0]))
+ var positions = global.DC.Transform.transformWGS84ToCartesian(
+ // eslint-disable-next-line new-cap
+ new global.DC.Position.fromArray([
+ Number(item.jd),
+ Number(item.wd),
+ 0,
+ 0,
+ -90,
+ 0
+ ])
+ )
this.viewer.scene.globe.depthTestAgainstTerrain = false
// eslint-disable-next-line no-unused-vars
- var panorama = new this.DC.PanoramaBox(this.viewer, {
+ var panorama = new global.DC.PanoramaBox(this.viewer, {
domId: 'PanoramaBox',
- position: [
- positions
- ]
+ position: [positions]
})
this.$store.commit('SET_PANORAMAPOPUP', true)
@@ -254,20 +382,26 @@
this.sceneLayer.show = false
})
- getLifeList({ lifetype: 9 }).then(res => {
- res.data.data.forEach(item => {
- const label = new this.DC.Label(new that.DC.Position(Number(item.jd), Number(item.wd), 0), item.mechanismname)
+ getLifeList({ lifetype: 9 }).then((res) => {
+ res.data.data.forEach((item) => {
+ const label = new global.DC.Label(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
+ item.mechanismname
+ )
label.setStyle({
- fillColor: this.DC.Color.CRIMSON,
- style: that.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,
- outlineColor: that.DC.Color.WHITE, // 边框颜色
+ fillColor: global.DC.Color.CRIMSON,
+ style: global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,
+ outlineColor: global.DC.Color.WHITE, // 边框颜色
outlineWidth: 8, // 边框大小,
font: '14px sans-serif',
pixelOffset: { x: 0, y: -24 }
})
this.aedLayer.addOverlay(label)
- const billboard = new this.DC.Billboard(new that.DC.Position(Number(item.jd), Number(item.wd), 0), '/img/leftnav/map-aed.png')
+ const billboard = new global.DC.Billboard(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
+ '/img/leftnav/map-aed.png'
+ )
billboard.size = [20, 20]
this.aedLayer.addOverlay(billboard)
@@ -275,10 +409,10 @@
this.aedLayer.show = false
})
- getLifeList({ lifetype: 11 }).then(res => {
- res.data.data.forEach(item => {
- const divIcon = new this.DC.DivIcon(
- new that.DC.Position(Number(item.jd), Number(item.wd), 0),
+ getLifeList({ lifetype: 11 }).then((res) => {
+ res.data.data.forEach((item) => {
+ const divIcon = new global.DC.DivIcon(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
`
<div class="park-entitys-box">
<div class="park-title" alt="${item.mechanismname}">
@@ -299,32 +433,62 @@
this.parkLayer.show = false
})
- getLifeList({ lifetype: 12 }).then(res => {
- res.data.data.forEach(item => {
- const label = new that.DC.Label(new that.DC.Position(Number(item.jd), Number(item.wd), 0), item.mechanismname)
+ getLifeList({ lifetype: 12 }).then((res) => {
+ res.data.data.forEach((item) => {
+ const label = new global.DC.Label(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
+ item.mechanismname
+ )
label.setStyle({
- fillColor: that.DC.Color.FUCHSIA,
- style: that.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,
- outlineColor: that.DC.Color.WHITE, // 边框颜色
+ fillColor: global.DC.Color.FUCHSIA,
+ style: global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,
+ outlineColor: global.DC.Color.WHITE, // 边框颜色
outlineWidth: 8, // 边框大小,
font: '14px sans-serif',
- pixelOffset: { x: 0, y: -24 }
+ pixelOffset: { x: 0, y: -40 }
})
that.comeLayer.addOverlay(label)
- const billboard = new that.DC.Billboard(new that.DC.Position(Number(item.jd), Number(item.wd), 0), '/img/leftnav/map-activity.png')
+ const billboard = new global.DC.Billboard(
+ new global.DC.Position(Number(item.jd), Number(item.wd), 0),
+ '/img/leftnav/map-activity.png'
+ )
billboard.size = [20, 20]
+ billboard.setStyle({
+ pixelOffset: { x: 0, y: -16 }
+ })
that.comeLayer.addOverlay(billboard)
})
this.comeLayer.show = false
+ })
+ },
+ openPopups (value) {
+ var popup = new global.DC.DivForms(this.viewer, {
+ domId: 'divFormsDomBox',
+ position: [
+ global.DC.Transform.transformWGS84ToCartesian(
+ new global.DC.Position(
+ Number(value.lng),
+ Number(value.lat),
+ Number(value.alt || 0)
+ )
+ )
+ ]
+ })
+ // console.log(value, "see");
+ this.$store.dispatch('setOurDataInPoput', value)
+ this.$store.dispatch('pcFlyView', {
+ jd: value.lng,
+ wd: value.lat,
+ viewer: this.viewer
})
}
}
}
</script>
-<style scoped lang='scss'>
+<style scoped lang="scss">
.left-nav {
position: fixed;
top: 160px;
@@ -369,4 +533,16 @@
}
}
}
+.addIcons {
+ position: absolute;
+ top: 0;
+ left: -60px;
+ width: 50px !important;
+ span {
+ font-size: 25px !important;
+ }
+}
+.avtiveAddIcons {
+ background-color: aqua;
+}
</style>
--
Gitblit v1.9.3