From a22aa1086eeef39a26cc161326ce09cd183185ea Mon Sep 17 00:00:00 2001
From: liuyg <liuyg@qq.com>
Date: Fri, 04 Mar 2022 15:57:47 +0800
Subject: [PATCH] 3.3 1.自定义标签,退出后自动清除 2.自定义标签,转换二维码的数据格式ok,移动端对接二维码ok, 3.自定义标签点击移动到指定位置 ok 4.面板自适应高度 4.更换定位依赖,自定义标签扫码入移动端可以定位并显示路线

---
 src/components/serviceNavBar/index.vue |  353 ++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 208 insertions(+), 145 deletions(-)

diff --git a/src/components/serviceNavBar/index.vue b/src/components/serviceNavBar/index.vue
index 6bc8a15..502c87a 100644
--- a/src/components/serviceNavBar/index.vue
+++ b/src/components/serviceNavBar/index.vue
@@ -1,166 +1,229 @@
 <template>
-    <public-box class="public-org-nav-bar">
-        <template slot="public-box-header">
-            <div class="title">
-                <img class="icon deblurring" :src="headerLog" alt />
-                <span>{{title}}</span>
-            </div>
-            <img class="close" src="/img/navicon/close.png" alt @click="closeModel" />
-        </template>
-        <template slot="public-box-content">
-            <div class="tab" v-show="false">
-                <ul>
-                    <li
-                        :class="{'on': item.flag}"
-                        v-for="(item, index) in titleList"
-                        :key="index"
-                        @click="topNavClick(item, index)"
-                    >{{ item.title }}</li>
-                </ul>
-            </div>
-            <ul>
-                <li
-                    v-for="(item, index) in itemNavList"
-                    :key="index"
-                    @click="mapPopup(item.details)"
-                >
-                    <img :src="item.icon" alt />
-                    <span>{{item.navTitle}}</span>
-                </li>
-            </ul>
-        </template>
-    </public-box>
+  <public-box class="public-org-nav-bar">
+    <template slot="public-box-header">
+      <div class="title">
+        <img class="icon deblurring" :src="headerLog" alt />
+        <span>{{ title }}</span>
+      </div>
+      <img class="close" src="/img/navicon/close.png" alt @click="closeModel" />
+    </template>
+    <template slot="public-box-content">
+      <div class="tab" v-show="false">
+        <ul>
+          <li
+            :class="{ on: item.flag }"
+            v-for="(item, index) in titleList"
+            :key="index"
+            @click="topNavClick(item, index)"
+          >
+            {{ item.title }}
+          </li>
+        </ul>
+      </div>
+      <ul>
+        <li
+          v-for="(item, index) in itemNavList"
+          :key="index"
+          @click="mapPopup(item.details)"
+        >
+          <img :src="item.icon" alt />
+          <span>{{ item.navTitle }}</span>
+        </li>
+      </ul>
+    </template>
+  </public-box>
 </template>
 
 <script>
-import { mapGetters } from 'vuex'
-import {
-    getList,
-    getLifeList
-} from '@/api/pc/service/index'
+import { mapGetters } from "vuex";
+import { getList, getLifeList } from "@/api/pc/service/index";
 
 export default {
-    name: 'ServiceNavBar',
-    data () {
-        return {
-            itemNavList: [],
-            DC: null
-        }
+  name: "ServiceNavBar",
+  data() {
+    return {
+      itemNavList: [],
+      DC: null,
+      ourLayer: null,
+    };
+  },
+  props: {
+    title: {
+      type: String,
     },
-    props: {
-        title: {
-            type: String
-        },
-        headerLog: {
-            type: String
-        },
-        arcCode: {
-            type: Number
-        }
+    headerLog: {
+      type: String,
     },
-    computed: {
-        ...mapGetters([
-            'viewer',
-            'popupBgUrl',
-            'pupupQRUrl',
-            // 点信息
-            'pointPosition',
-            // 点名称
-            'stateName',
-            // 地址
-            'siteName',
-            // 介绍
-            'introduceText',
-            // 全景地址
-            'panoramaUrl'
-        ])
+    arcCode: {
+      type: Number,
     },
-    created () {
-        this.DC = global.DC
-        this.titleList = []
-        getList().then(res => {
-            res.data.data.forEach(item => {
-                this.titleList.push({ title: item.dictValue, flag: false, key: item.dictKey })
-            })
+  },
+  computed: {
+    ...mapGetters([
+      "viewer",
+      "popupBgUrl",
+      "pupupQRUrl",
+      // 点信息
+      "pointPosition",
+      // 点名称
+      "stateName",
+      // 地址
+      "siteName",
+      // 介绍
+      "introduceText",
+      // 全景地址
+      "panoramaUrl",
+    ]),
+  },
+  created() {
+    this.DC = global.DC;
+    this.titleList = [];
+    //三江校区//"土木楼"//"科学园"//"黄河路"//"红旗校区"
+    getList().then((res) => {
+      res.data.data.forEach((item) => {
+        // console.log(item, "see");
+        this.titleList.push({
+          title: item.dictValue,
+          flag: false,
+          key: item.dictKey,
+        });
+      });
 
-            this.titleList[0].flag = true
+      this.titleList[0].flag = true;
 
-            this.getChilsNavs(this.titleList[0].key)
-        })
+      this.getChilsNavs(this.titleList[0].key);
+    });
+  },
+  mounted() {},
+  methods: {
+    closeModel() {
+      this.$parent.closeModel();
     },
-    mounted () {
+    topNavClick(item, index) {
+      this.titleList.forEach((item) => {
+        item.flag = false;
+      });
+
+      this.titleList[index].flag = true;
+
+      this.getChilsNavs(item.key);
     },
-    methods: {
-        closeModel () {
-            this.$parent.closeModel()
-        },
-        topNavClick (item, index) {
-            this.titleList.forEach(item => {
-                item.flag = false
-            })
+    getChilsNavs(campus) {
+      this.itemNavList = [];
+      let that = this;
+      //   console.log(this.arcCode, "see22");
+      //判断是否是当前所需要图层并创建 属性为 this.arrCode
+      if (this.ourLayer != null) {
+        this.ourLayer.clear();
+      } else {
+        this.ourLayer = new this.DC.HtmlLayer("Layer" + this.arcCode);
+        this.viewer.addLayer(this.ourLayer);
+      }
+      //   console.log(this.ourLayer, "see");
+      getLifeList({ lifetype: this.arcCode, campus: campus }).then((res) => {
+        res.data.data.records.forEach((item) => {
+          //   console.log(item, "see");
+          this.itemNavList.push({
+            navTitle: item.mechanismname,
+            icon: "/img/navicon/tag.png",
+            details: item,
+          });
+          //创建图标 做生活设施分层标签
+          that.addDivIcon(item, this.ourLayer);
+        });
+      });
+    },
+    addDivIcon(item, mylayer) {
+      let that = this;
+      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) => {
+        // console.log(item, "see");
+        // that.openPopups({
+        //   lng: e.overlay.position.lng,
+        //   lat: e.overlay.position.lat,
+        //   item: item,
+        // });
+        that.mapPopup(item);
+      });
+      mylayer.addOverlay(divIcon);
+    },
+    mapPopup(param) {
+      var result = param;
+      this.$store.commit("CLEAR_ALL", null);
 
-            this.titleList[index].flag = true
+      var imgArr = result.tpurl.split(",");
 
-            this.getChilsNavs(item.key)
-        },
-        getChilsNavs (campus) {
-            this.itemNavList = []
+      this.$store.commit("SET_POPUPBGURL", imgArr[0]);
+      this.$store.commit("SET_POPUPQRURL", result.codeurl);
+      this.$store.commit("SET_POINTPOSITION", [
+        Number(result.jd),
+        Number(result.wd),
+        Number(result.gd),
+        Number(result.heading),
+        Number(result.pitch),
+        Number(result.roll),
+      ]);
+      this.$store.commit("SET_STATENAME", result.mechanismname);
+      this.$store.commit("SET_SITENAME", result.address);
+      this.$store.commit("SET_TELEPHONE", result.telephone);
+      this.$store.commit("SET_INTRODUCETEXT", result.introduce);
+      this.$store.commit("SET_PANORAMAURL", result.panoramaurl);
+      this.$store.commit("SET_POPUPIMGATLAS", imgArr);
 
-            getLifeList({ lifetype: this.arcCode, campus: campus }).then(res => {
-                res.data.data.records.forEach(item => {
-                    this.itemNavList.push({
-                        navTitle: item.mechanismname,
-                        icon: '/img/navicon/tag.png',
-                        details: item
-                    })
-                })
-            })
-        },
-        mapPopup (param) {
-            var result = param
-            this.$store.commit('CLEAR_ALL', null)
+      if (result.videourl && result.videourl != "") {
+        this.$store.commit("SET_MONITORURL", result.videourl);
+      }
 
-            var imgArr = result.tpurl.split(',')
+      this.newPopup(result);
+      this.viewer.flyToPosition(
+        new this.DC.Position(
+          Number(result.jd),
+          Number(result.wd),
+          300,
+          Number(result.heading),
+          Number(result.pitch),
+          Number(result.roll)
+        ),
+        function () {},
+        3
+      );
+    },
+    newPopup(item) {
+      const position = this.DC.Transform.transformWGS84ToCartesian(
+        new this.DC.Position(Number(item.jd), Number(item.wd), Number(item.gd))
+      );
+      // eslint-disable-next-line no-unused-vars
+      var popup = new this.DC.DivForms(this.viewer, {
+        domId: "divFormsDomBox",
+        position: [position],
+      });
 
-            this.$store.commit('SET_POPUPBGURL', imgArr[0])
-            this.$store.commit('SET_POPUPQRURL', result.codeurl)
-            this.$store.commit('SET_POINTPOSITION', [Number(result.jd), Number(result.wd), Number(result.gd), Number(result.heading), Number(result.pitch), Number(result.roll)])
-            this.$store.commit('SET_STATENAME', result.mechanismname)
-            this.$store.commit('SET_SITENAME', result.address)
-            this.$store.commit('SET_TELEPHONE', result.telephone)
-            this.$store.commit('SET_INTRODUCETEXT', result.introduce)
-            this.$store.commit('SET_PANORAMAURL', result.panoramaurl)
-            this.$store.commit('SET_POPUPIMGATLAS', imgArr)
-
-            if (result.videourl && result.videourl != '') {
-                this.$store.commit('SET_MONITORURL', result.videourl)
-            }
-
-            this.newPopup(result)
-            this.viewer.flyToPosition(
-                new this.DC.Position(Number(result.jd), Number(result.wd), 300, Number(result.heading), Number(result.pitch), Number(result.roll)),
-                function () {
-                },
-                3
-            )
-        },
-        newPopup (item) {
-            const position = this.DC.Transform.transformWGS84ToCartesian(new this.DC.Position(Number(item.jd), Number(item.wd), Number(item.gd)))
-            // eslint-disable-next-line no-unused-vars
-            var popup = new this.DC.DivForms(this.viewer, {
-                domId: 'divFormsDomBox',
-                position: [
-                    position
-                ]
-            })
-
-            this.$store.commit('SET_PANORAMAPOPUP', false)
-            this.$store.commit('SET_MONITORPOPUP', false)
-            this.$store.commit('SET_DETAILSPOPUP', true)
-        }
+      this.$store.commit("SET_PANORAMAPOPUP", false);
+      this.$store.commit("SET_MONITORPOPUP", false);
+      this.$store.commit("SET_DETAILSPOPUP", true);
+    },
+  },
+  destroyed() {
+    if (this.ourLayer != null) {
+      this.ourLayer.remove();
+      this.ourLayer = null;
     }
-}
+    this.$store.commit("SET_DETAILSPOPUP", false);
+  },
+};
 </script>
 
-<style scoped lang='scss'>
-</style>
+<style scoped lang="scss"></style>

--
Gitblit v1.9.3