From e27c1000a54804d024fa22d3fa9a402a4d23c7e7 Mon Sep 17 00:00:00 2001
From: liuyg <376836862@qq.com>
Date: Thu, 16 Dec 2021 15:40:08 +0800
Subject: [PATCH] +基础弹窗的公共化,响应传递的数据
---
src/components/mobileWindow/index.vue | 70 ++++++++++
src/components/mobilemap/index.vue | 96 +++----------
src/components/mobileLeftNav/index.vue | 152 ++++++++++++++-------
src/store/getters.js | 6
src/store/modules/mobile.js | 40 +++++
src/components/mobilePopupOurOnce/index.vue | 20 +-
6 files changed, 244 insertions(+), 140 deletions(-)
diff --git a/src/components/mobileLeftNav/index.vue b/src/components/mobileLeftNav/index.vue
index 0f03e66..03a92b6 100644
--- a/src/components/mobileLeftNav/index.vue
+++ b/src/components/mobileLeftNav/index.vue
@@ -14,34 +14,6 @@
<span>{{ item.label }}</span>
</li>
</ul>
- <div
- ref="mobile-mapContentContent"
- v-show="popupWindow1"
- id="mobile-map_MP1"
- >
- <div class="mobile-popup-imgs-heard">
- <img :src="url1" alt="" />
- <el-image
- style="width: 100px; height: 100px"
- :src="url1"
- id="mobileBigImgs"
- v-show="false"
- :preview-src-list="srcList1"
- >
- </el-image>
- 南门口
- </div>
- <div class="mobile-popup-control">
- <el-link icon="el-icon-picture-outline-round" @click="mobileOpenImgs1"
- >图集</el-link
- >
- <el-divider direction="vertical"></el-divider>
- <el-link icon="el-icon-map-location">实景</el-link>
- <el-divider direction="vertical"></el-divider>
- <el-link icon="el-icon-aim" @click="goOn1">去这</el-link>
- </div>
- </div>
- <!-- 地图图标弹窗↑ -->
</div>
</template>
@@ -192,6 +164,7 @@
item.img = item.normal;
this[item.layer].show = false;
}
+ this.$store.dispatch("closeWindowsDom"); //关闭弹窗
},
initialize(viewer) {
var that = this;
@@ -199,16 +172,22 @@
this.viewer = viewer;
this.tagLayer = new this.DC.HtmlLayer("tagLayer");
viewer.addLayer(this.tagLayer);
+
this.wayLayer = new this.DC.HtmlLayer("wayLayer");
viewer.addLayer(this.wayLayer);
+
this.sceneLayer = new this.DC.VectorLayer("sceneLayer");
viewer.addLayer(this.sceneLayer);
+
+ this.activityLayer = new this.DC.VectorLayer("activityLayer");
+ viewer.addLayer(this.activityLayer);
this.aedLayer = new this.DC.VectorLayer("aedLayer");
viewer.addLayer(this.aedLayer);
this.parkLayer = new this.DC.HtmlLayer("parkLayer");
viewer.addLayer(this.parkLayer);
+
this.comeLayer = new this.DC.VectorLayer("comeLayer");
viewer.addLayer(this.comeLayer);
@@ -227,29 +206,18 @@
</div>
`
);
- this.tagLayer.addOverlay(divIcon);
+ // e.overlay._position._lng,
+ // e.overlay._position._lat - 0.012,
//订阅事件1
divIcon.on(DC.MouseEventType.CLICK, (e) => {
- // console.log(e);
- that.popupWindow1 = true;
// 定制化窗体
- var divForms = new DC.mobileDivForms(viewer, {
- domId: "mobilePopup",
- title: "成教楼 ",
- className: "mobilePopup",
- content: document.getElementById("mobile-map_MP1"),
- position: [e.position],
- });
- viewer.zoomToPosition(
- new DC.Position(
- e.overlay._position._lng,
- e.overlay._position._lat - 0.012,
- 1530,
- 0,
- -45
- )
+ that.openPopupS(
+ e.position,
+ [e.overlay._position._lng, e.overlay._position._lat],
+ { name: "标签" }
);
});
+ this.tagLayer.addOverlay(divIcon); //标签
});
const positions2 = this.generatePosition(50);
@@ -267,7 +235,16 @@
</div>
`
);
- this.wayLayer.addOverlay(divIcon);
+ //订阅事件2
+ divIcon.on(DC.MouseEventType.CLICK, (e) => {
+ // 定制化窗体
+ that.openPopupS(
+ e.position,
+ [e.overlay._position._lng, e.overlay._position._lat],
+ { name: "道路" }
+ );
+ });
+ this.wayLayer.addOverlay(divIcon); //道路
});
const positions3 = this.generatePosition(50);
@@ -277,7 +254,44 @@
"/img/leftnav/map-panorama.png"
);
billboard.size = [16, 16];
- this.sceneLayer.addOverlay(billboard);
+ //订阅事件3
+ billboard.on(DC.MouseEventType.CLICK, (e) => {
+ // 定制化窗体
+ that.openPopupS(
+ e.position,
+ [e.wgs84Position.lng, e.wgs84Position.lat],
+ { name: "实景" }
+ );
+ });
+ this.sceneLayer.addOverlay(billboard); //实景
+ });
+
+ const positions10 = this.generatePosition(50);
+ positions10.forEach((item) => {
+ const label = new this.DC.Label(item, "活动");
+ label.setStyle({
+ fillColor: this.DC.Color.ORANGERED,
+ font: "10px sans-serif",
+ pixelOffset: { x: 0, y: -16 },
+ });
+ this.activityLayer.addOverlay(label);
+
+ const billboard = new this.DC.Billboard(
+ item,
+ "/img/leftnav/map-aed.png"
+ // "/img/leftnav/map-panorama.png"
+ );
+ billboard.size = [16, 16];
+ //订阅事件10
+ billboard.on(DC.MouseEventType.CLICK, (e) => {
+ // 定制化窗体
+ that.openPopupS(
+ e.position,
+ [e.wgs84Position.lng, e.wgs84Position.lat],
+ { name: "活动" }
+ );
+ });
+ this.activityLayer.addOverlay(billboard); //活动
});
const positions4 = this.generatePosition(10);
@@ -295,8 +309,16 @@
"/img/leftnav/map-aed.png"
);
billboard.size = [16, 16];
-
- this.aedLayer.addOverlay(billboard);
+ //订阅事件4
+ billboard.on(DC.MouseEventType.CLICK, (e) => {
+ // 定制化窗体
+ that.openPopupS(
+ e.position,
+ [e.wgs84Position.lng, e.wgs84Position.lat],
+ { name: "建筑AED" }
+ );
+ });
+ this.aedLayer.addOverlay(billboard); //AED
});
const positions5 = this.generatePosition(120);
@@ -318,6 +340,15 @@
</div>
`
);
+ //订阅事件5
+ divIcon.on(DC.MouseEventType.CLICK, (e) => {
+ // 定制化窗体
+ that.openPopupS(
+ e.position,
+ [e.overlay._position._lng, e.overlay._position._lat],
+ { name: "校外街路侧停车场" }
+ );
+ });
this.parkLayer.addOverlay(divIcon);
});
@@ -338,13 +369,22 @@
"/img/leftnav/map-activity.png"
);
billboard.size = [16, 16];
-
+ //订阅事件6
+ billboard.on(DC.MouseEventType.CLICK, (e) => {
+ // 定制化窗体
+ that.openPopupS(
+ e.position,
+ [e.wgs84Position.lng, e.wgs84Position.lat],
+ { name: "123" }
+ );
+ });
this.comeLayer.addOverlay(billboard);
});
this.tagLayer.show = false;
this.wayLayer.show = false;
this.sceneLayer.show = false;
+ this.activityLayer.show = false;
this.aedLayer.show = false;
this.parkLayer.show = false;
this.comeLayer.show = false;
@@ -354,6 +394,16 @@
imgsDom.click();
},
goOn1() {},
+ openPopupS(position, lntLat, query) {
+ let that = this;
+ // 定制化窗体
+ let d = {
+ position,
+ lntLat,
+ query: { ...(query || {}), position, lntLat },
+ };
+ that.$store.dispatch("setMobileWindows", d);
+ },
},
};
</script>
diff --git a/src/components/mobilePopupOurOnce/index.vue b/src/components/mobilePopupOurOnce/index.vue
index ace4082..018560c 100644
--- a/src/components/mobilePopupOurOnce/index.vue
+++ b/src/components/mobilePopupOurOnce/index.vue
@@ -59,19 +59,13 @@
if (val == "定位") {
this.$store.commit("MSET_BIGPOPUP", false);
setTimeout(() => {
- // that.$refs.mobilemapBoxFrom.openPopupS(
- // this.onceData.Cartesian3,
- // this.onceData.position
- // );
- that.$parent.$parent.$parent.$parent.openPopupS(
- this.onceData.Cartesian3,
- this.onceData.position
- );
- // console.log(that.$refs.mobilemapBoxFrom);
- // 定位 打开弹窗
- // this.mviewer.zoomToPosition(
- // new that.DC.Position(p[0], p[1] - 0.016, 1530, 0, -45)
- // );
+ // 定制化窗体
+ let d = {
+ position: that.onceData.Cartesian3,
+ lntLat: that.onceData.position,
+ query: this.onceData,
+ };
+ that.popupsDom = that.$store.dispatch("setMobileWindows", d);
}, 500);
}
},
diff --git a/src/components/mobileWindow/index.vue b/src/components/mobileWindow/index.vue
new file mode 100644
index 0000000..d3ff556
--- /dev/null
+++ b/src/components/mobileWindow/index.vue
@@ -0,0 +1,70 @@
+<template>
+ <div
+ ref="mobile-mapContentContent"
+ v-show="!MobileWindowsHide"
+ id="mobile-map_content_content"
+ >
+ <div class="mobile-popup-imgs-heard">
+ <img :src="url" alt="" />
+ <el-image
+ style="width: 100px; height: 100px"
+ :src="url"
+ id="mobileBigImgs"
+ v-show="false"
+ :preview-src-list="srcList"
+ >
+ </el-image>
+ <div>{{ query }}</div>
+ <!-- 哈工大A10公寫总建筑面积30740平方米,于2001年采用货款方式高标准建造并投入使用。整个楼体共分十层,地上九层为公寫主体。公寓外观呈工字型,公寓内房司以A、B、C三个区域別分,与哈工大雄厚的工科底蕴遥相呼应,是哈尔滨工业大学学生公寫的标志性建筑 -->
+ </div>
+ <div class="mobile-popup-control">
+ <el-link icon="el-icon-picture-outline-round" @click="mobileOpenImgs"
+ >图集</el-link
+ >
+ <el-divider direction="vertical"></el-divider>
+ <el-link icon="el-icon-map-location">实景</el-link>
+ <el-divider direction="vertical"></el-divider>
+ <el-link icon="el-icon-aim" @click="goOn">去这</el-link>
+ </div>
+ </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+export default {
+ name: "mobileWindow",
+ computed: {
+ ...mapGetters(["MobileWindowsHide", "query"]),
+ },
+ watch: {
+ MobileWindowsHide() {
+ // this.fullscreenLoading = true;
+ setTimeout(() => {
+ // this.fullscreenLoading = false;
+ console.log("地图点击弹窗数据请求参数", this.query);
+ }, 500);
+ },
+ },
+ data() {
+ return {
+ fullscreenLoading: false,
+ url: "/img/job/one.jpg",
+ positions: "",
+ srcList: [
+ "https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg",
+ "https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg",
+ ],
+ };
+ },
+ methods: {
+ mobileOpenImgs() {
+ let imgsDom = document.getElementById("mobileBigImgs");
+ imgsDom.click();
+ },
+ goOn() {},
+ },
+};
+</script>
+
+<style>
+</style>
\ No newline at end of file
diff --git a/src/components/mobilemap/index.vue b/src/components/mobilemap/index.vue
index 4d1b8a2..cb27c45 100644
--- a/src/components/mobilemap/index.vue
+++ b/src/components/mobilemap/index.vue
@@ -3,34 +3,7 @@
<div id="mobile-viewer-container">
<!-- 地图图标弹窗↓ -->
<div id="mobile-map_popup_content"></div>
- <div
- ref="mobile-mapContentContent"
- v-show="popupWindow"
- id="mobile-map_content_content"
- >
- <div class="mobile-popup-imgs-heard">
- <img :src="url" alt="" />
- <el-image
- style="width: 100px; height: 100px"
- :src="url"
- id="mobileBigImgs"
- v-show="false"
- :preview-src-list="srcList"
- >
- </el-image>
- <div>坐标 {{ positions }}</div>
- 哈工大A10公寫总建筑面积30740平方米,于2001年采用货款方式高标准建造并投入使用。整个楼体共分十层,地上九层为公寫主体。公寓外观呈工字型,公寓内房司以A、B、C三个区域別分,与哈工大雄厚的工科底蕴遥相呼应,是哈尔滨工业大学学生公寫的标志性建筑
- </div>
- <div class="mobile-popup-control">
- <el-link icon="el-icon-picture-outline-round" @click="mobileOpenImgs"
- >图集</el-link
- >
- <el-divider direction="vertical"></el-divider>
- <el-link icon="el-icon-map-location">实景</el-link>
- <el-divider direction="vertical"></el-divider>
- <el-link icon="el-icon-aim" @click="goOn">去这</el-link>
- </div>
- </div>
+ <mobileWindow></mobileWindow>
<!-- 地图图标弹窗↑ -->
<!-- 控制↓ -->
<mobileLeftNav ref="mobileLeftNav"></mobileLeftNav>
@@ -52,7 +25,6 @@
data() {
return {
DC: "",
- popupsDom: "",
positions: "",
url: "/img/job/one.jpg",
srcList: [
@@ -69,7 +41,14 @@
};
},
computed: {
- ...mapGetters(["mviewer", "mBigPopup", "mBigPopupAfter", "iconHide"]),
+ ...mapGetters([
+ "mviewer",
+ "MobileWindowsHide",
+ "mBigPopup",
+ "mBigPopupAfter",
+ "iconHide",
+ "popupsDom",
+ ]),
},
watch: {
mBigPopup() {
@@ -161,6 +140,7 @@
});
that.$refs.mobileLeftNav.initialize(viewer);
that.$store.commit("MSET_VIEWER", viewer);
+ that.$store.commit("MSET_DC", DC);
const popup = viewer.popup;
popup.hide();
@@ -178,10 +158,11 @@
if (!that.iconHide) {
that.$store.commit("MSET_ICONHIDE", true);
}
- if (that.popupWindow && that.popupsDom) {
- that.popupsDom.closeOur();
- that.popupWindow = false;
- }
+ that.$store.dispatch("closeWindowsDom"); //关闭弹窗
+ // if (!that.MobileWindowsHide && that.popupsDom) {
+ // that.popupsDom.closeOur();
+ // that.$store.commit("MSET_MOBILEWINDOWSHIDE", true);
+ // }
// nowPosition = [e.wgs84Position.lng, e.wgs84Position.lat];
// console.log(nowPosition);
});
@@ -268,48 +249,15 @@
DC.ready(initViewer);
},
methods: {
- openPopupS(position, lntLat) {
+ openPopupS(position, lntLat, query) {
let that = this;
// 定制化窗体
- that.popupsDom = new that.DC.mobileDivForms(that.mviewer, {
- domId: "mobilePopup",
- title: "成教楼 ",
- className: "mobilePopup",
- content: document.getElementById("mobile-map_content_content"),
- position: [position],
- });
- that.positions = lntLat;
- that.popupWindow = true;
- // let flying = new DC.Flying(viewer);
- // flying.positions = [
- // `${nowPosition[0]},${nowPosition[0]},0,-29`,
- // `${e.wgs84Position.lng},${e.wgs84Position.lat},0,-29`,
- // ];
- // flying.start();
- // console.log(e.wgs84Position.lng, e.wgs84Position.lat);
- that.mviewer.zoomToPosition(
- new that.DC.Position(lntLat[0], lntLat[1] - 0.012, 1530, 0, -45)
- );
- },
- mobileOpenImgs() {
- let imgsDom = document.getElementById("mobileBigImgs");
- imgsDom.click();
- },
- goOn() {
- // if (navigator.geolocation) {
- // navigator.geolocation.watchPosition(backPoint);
- // }
- // function backPoint(res) {
- // console.log(res);
- // let position = [res.coords.longitude, res.coords.latitude];
- // console.log(position);
- // }
- // this.getLocation();
- // location((res) => {
- // console.log(res);
- // alert(res.message);
- // });
- // console.log(returnCitySN["cip"]);
+ let d = {
+ position,
+ lntLat,
+ query: { ...(query || {}), position, lntLat },
+ };
+ that.$store.dispatch("setMobileWindows", d);
},
getLocation() {
// let _that = this;
diff --git a/src/store/getters.js b/src/store/getters.js
index 28b33f7..aea9271 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -3,7 +3,11 @@
mviewer: state => state.mobile.mviewer,
mBigPopup: state => state.mobile.mBigPopup,
mBigPopupAfter: state => state.mobile.mBigPopupAfter,
- iconHide: state => state.mobile.iconHide
+ iconHide: state => state.mobile.iconHide,
+ DC: state => state.mobile.DC,
+ MobileWindowsHide: state => state.mobile.MobileWindowsHide,
+ popupsDom: state => state.mobile.popupsDom,
+ query: state => state.mobile.query
}
const getters = {
...mobile,
diff --git a/src/store/modules/mobile.js b/src/store/modules/mobile.js
index ac242b6..b456e2b 100644
--- a/src/store/modules/mobile.js
+++ b/src/store/modules/mobile.js
@@ -5,6 +5,10 @@
mBigPopupAfter: false,
ips: '',
iconHide: false,
+ DC: '',
+ MobileWindowsHide: true,
+ popupsDom: '',
+ query: {}
},
mutations: {
MSET_VIEWER(state, viewer) {
@@ -18,10 +22,44 @@
},
MSET_ICONHIDE(state, viewer) {
state.iconHide = viewer
+ },
+ MSET_DC(state, viewer) {
+ state.DC = viewer
+ },
+ MSET_MOBILEWINDOWSHIDE(state, viewer) {
+ state.MobileWindowsHide = viewer
+ },
+ MSET_POPUPDOM(state, viewer) {
+ state.popupsDom = viewer
+ },
+ MSET_QUERY(state, viewer) {
+ state.query = viewer
}
},
actions: {
-
+ setMobileWindows({ state, commit }, data) {
+ // 传递响应数据
+ commit("MSET_QUERY", data.query)
+ // 定制化窗体
+ let popupsDom = new state.DC.mobileDivForms(state.mviewer, {
+ domId: "mobilePopup",
+ title: data.query.name || "成教楼 ",
+ className: "mobilePopup",
+ content: document.getElementById("mobile-map_content_content"),
+ position: [data.position],
+ });
+ commit("MSET_MOBILEWINDOWSHIDE", false)
+ state.mviewer.zoomToPosition(
+ new state.DC.Position(data.lntLat[0], data.lntLat[1] - 0.012, 1530, 0, -45)
+ );
+ commit("MSET_POPUPDOM", popupsDom)
+ },
+ closeWindowsDom({ state, commit }) {
+ if (!state.MobileWindowsHide && state.popupsDom) {
+ state.popupsDom.closeOur();
+ commit("MSET_MOBILEWINDOWSHIDE", true);
+ }
+ }
}
}
--
Gitblit v1.9.3