liuyg
2021-12-16 e27c1000a54804d024fa22d3fa9a402a4d23c7e7
+基础弹窗的公共化,响应传递的数据
5 files modified
1 files added
384 ■■■■■ changed files
src/components/mobileLeftNav/index.vue 152 ●●●●● patch | view | raw | blame | history
src/components/mobilePopupOurOnce/index.vue 20 ●●●●● patch | view | raw | blame | history
src/components/mobileWindow/index.vue 70 ●●●●● patch | view | raw | blame | history
src/components/mobilemap/index.vue 96 ●●●● patch | view | raw | blame | history
src/store/getters.js 6 ●●●● patch | view | raw | blame | history
src/store/modules/mobile.js 40 ●●●●● patch | view | raw | blame | history
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>
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);
      }
    },
src/components/mobileWindow/index.vue
New file
@@ -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>
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;
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,
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);
            }
        }
    }
}