From 01f9c88fd0ee768155e5b341c2bb95a85bc11a08 Mon Sep 17 00:00:00 2001
From: liuyg <liuyg@qq.com>
Date: Sat, 05 Mar 2022 17:49:36 +0800
Subject: [PATCH] ++

---
 src/components/map/components/campusBuildingSearch.vue |  490 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 425 insertions(+), 65 deletions(-)

diff --git a/src/components/map/components/campusBuildingSearch.vue b/src/components/map/components/campusBuildingSearch.vue
index f10cc0f..81d94eb 100644
--- a/src/components/map/components/campusBuildingSearch.vue
+++ b/src/components/map/components/campusBuildingSearch.vue
@@ -1,93 +1,453 @@
 <template>
-    <div>
-        <campusNav ref="campusNavRoute"
-                   v-show="campusNavFlag" />
-        <div class="map-campus-serarch">
-            <el-input class="search-input"
-                      placeholder="校园搜索…"
-                      v-model="input3">
-            </el-input>
-            <el-button-group>
-                <el-button @click="navigationShow"
-                           class="deblurring"
-                           icon="el-icon-my-path"></el-button>
-                <el-button class="deblurring"
-                           type="primary"
-                           icon="el-icon-my-search"></el-button>
-            </el-button-group>
+  <div>
+    <div class="map-campus-search" id="CampusSearchPanel">
+      <el-input
+        class="search-input"
+        placeholder="校区搜索…"
+        v-model="searchInput"
+        @input="searchValueChange"
+        @focus="shortcutFlag = true"
+      ></el-input>
+      <el-button-group>
+        <el-button
+          @click="navigationShow"
+          class="deblurring"
+          icon="el-icon-my-path"
+        ></el-button>
+        <el-button
+          @click="fuzzyQuery"
+          class="deblurring"
+          type="primary"
+          icon="el-icon-my-search"
+        ></el-button>
+      </el-button-group>
+      <div v-show="searchValShow" class="search-value-box">
+        <ul>
+          <li
+            v-for="(item, index) in searchValList"
+            :key="index"
+            @click="loadPopup(item)"
+          >
+            {{ item.mechanismname }}
+          </li>
+        </ul>
+      </div>
+      <div class="map-campus-shortcut" v-show="shortcutFlag">
+        <div class="shortcut-box">
+          <ul>
+            <li v-for="(item, index) in shortcutList" :key="index">
+              <el-button @click="openModelPopup(item)">
+                <img :src="item.bgimg" alt />
+                <span>{{ item.title }}</span>
+              </el-button>
+            </li>
+          </ul>
         </div>
+      </div>
     </div>
+  </div>
 </template>
 
 <script>
+import { mapGetters } from "vuex";
+
+import { getList } from "@/api/pc/orgnav/index";
+import { getSearchList } from "@/api/pc/public/search";
 
 export default {
-    name: 'campusBuildingSearch',
-    data () {
-        return {
-            campusNavFlag: false
+  name: "campusBuildingSearch",
+  data() {
+    return {
+      DC: null,
+      shortcutList: [
+        {
+          bgimg: "/img/search/org.png",
+          title: "其他机构",
+          type: "orgnav",
+          path: "/pcLayout/default/orgnav/rest",
+          code: 5,
+        },
+        // {
+        //     bgimg: '/img/search/ofc.png',
+        //     title: '职能部处',
+        //     type: 'orgnav',
+        //     path: '/pcLayout/default/orgnav/ofc',
+        //     code: 2
+        // },
+        // {
+        //     bgimg: '/img/search/teach.png',
+        //     title: '教学科研',
+        //     type: 'arc',
+        //     path: '/pcLayout/default/arc/teaching',
+        //     code: 2
+        // },
+        {
+          bgimg: "/img/search/venue.png",
+          title: "校区场馆",
+          type: "arc",
+          path: "/pcLayout/default/arc/venue",
+          code: 3,
+        },
+        {
+          bgimg: "/img/search/floor.png",
+          title: "主要场馆",
+          type: "arc",
+          path: "/pcLayout/default/arc/rest",
+          code: 7,
+        },
+        // {
+        //   bgimg: "/img/search/dorm.png",
+        //   title: "校区宿舍",
+        //   type: "arc",
+        //   path: "/pcLayout/default/arc/dorm",
+        //   code: 4,
+        // },
+
+        // {
+        //     bgimg: '/img/search/scenery.png',
+        //     title: '文化风景',
+        //     type: 'arc',
+        //     path: '/pcLayout/default/arc/culture',
+        //     code: 5
+        // }
+      ],
+      shortcutFlag: false,
+      searchInput: "",
+      searchValShow: false,
+      searchValList: [],
+    };
+  },
+  computed: {
+    ...mapGetters([
+      "viewer",
+      // 校区内导航的显示关闭
+      "campusNavFlag",
+      "orgNavBarFlag",
+      "arcNavBarFlag",
+    ]),
+  },
+  created() {
+    this.DC = global.DC;
+  },
+  methods: {
+    searchValueChange() {
+      if (this.searchInput == "") {
+        this.searchValList = [];
+        this.searchValShow = false;
+        return;
+      }
+      getSearchList({ mechanismName: this.searchInput }).then((res) => {
+        if (res.data.data.length > 0) {
+          this.searchValList = res.data.data;
+          this.searchValShow = true;
         }
+      });
     },
 
-    methods: {
-        navigationShow () {
-            this.campusNavFlag = true
-        },
-        closeCampusNav () {
-            this.campusNavFlag = false
-        }
-    }
+    navigationShow() {
+      if (this.campusNavFlag == false) {
+        this.$store.commit("SET_CAMPUSNAVFLAG", true);
+      }
+    },
 
-}
+    fuzzyQuery() {
+      if (this.searchInput == "") {
+        this.searchValList = [];
+        this.searchValShow = false;
+
+        this.$message({
+          message: "请输入关键字",
+          type: "warning",
+          duration: 1000,
+        });
+        return;
+      }
+      getSearchList({ mechanismName: this.searchInput }).then((res) => {
+        if (res.data.data.length > 0) {
+          this.$store.commit("SET_SEARCHPOPUPFLAG", true);
+          this.$store.commit("SET_SEARCHPOPUPLIST", res.data.data);
+          this.searchInput = "";
+          this.searchValList = [];
+          this.searchValShow = false;
+        }
+      });
+    },
+
+    openModelPopup(param) {
+      var list = [];
+
+      if (param.type == "orgnav") {
+        this.$store.commit("SET_ORGNAVBARTITLE", param.title);
+        this.$store.commit("SET_ORGNAVBARLIST", []);
+        this.$store.commit("SET_ORGNAVBARFLAG", true);
+
+        getList({ type: param.code }).then((res) => {
+          res.data.data.records.forEach((item) => {
+            list.push({
+              navTitle: item.mechanismname,
+              icon: "/img/navicon/tag.png",
+              longitude: item.jd,
+              latitude: item.wd,
+              alt: item.gd,
+              heading: item.heading,
+              pitch: item.pitch,
+              roll: item.roll,
+              bgImg: item.tpurl,
+              QRImg: item.codeurl,
+              address: item.address,
+              telephone: item.telephone,
+              introduce: item.introduce,
+              videourl: item.videourl,
+            });
+          });
+
+          this.$store.commit("SET_ORGNAVBARLIST", list);
+        });
+      } else if (param.type == "arc") {
+        this.$store.commit("SET_ARCNAVBARTITLE", param.title);
+        this.$store.commit("SET_ARCNAVBARCODE", param.code);
+        this.$store.commit("SET_ARCNAVBARFLAG", true);
+      }
+
+      this.$router.push(param.path);
+    },
+
+    shortcutShow(event) {
+      var sp = document.getElementById("CampusSearchPanel");
+
+      if (sp) {
+        if (!sp.contains(event.target)) {
+          // 这句是说如果我们点击到了id为myPanel以外的区域
+          this.shortcutFlag = false;
+        }
+      }
+    },
+
+    loadPopup(param) {
+      var that = this;
+
+      that.searchInput = "";
+      that.searchValList = [];
+      that.searchValShow = false;
+
+      this.$store.commit("CLEAR_ALL", null);
+
+      var imgArr = param.tpurl.split(",");
+
+      this.$store.commit("SET_POPUPBGURL", imgArr[0]);
+      this.$store.commit("SET_POPUPQRURL", param.codeurl);
+      this.$store.commit("SET_POINTPOSITION", [
+        Number(param.jd),
+        Number(param.wd),
+        Number(param.gd),
+        Number(param.heading),
+        Number(param.pitch),
+        Number(param.roll),
+      ]);
+      this.$store.commit("SET_STATENAME", param.mechanismname);
+      this.$store.commit("SET_SITENAME", param.address);
+      this.$store.commit("SET_TELEPHONE", param.telephone);
+      this.$store.commit("SET_INTRODUCETEXT", param.introduce);
+      if (param.panoramaurl != "") {
+        this.$store.commit("SET_PANORAMAURL", param.panoramaurl);
+      }
+      if (param.videourl && param.videourl != "") {
+        this.$store.commit("SET_MONITORURL", param.videourl);
+      }
+      this.$store.commit("SET_POPUPIMGATLAS", imgArr);
+      if (param.jx != undefined && param.jx != "") {
+        var tabOne = param.jx.split(",");
+        this.$store.commit("SET_TEACHLIST", tabOne);
+      } else {
+        this.$store.commit("SET_TEACHLIST", []);
+      }
+
+      if (param.sh != undefined && param.sh != "") {
+        var tabTwo = param.sh.split(",");
+        this.$store.commit("SET_LIVELIST", tabTwo);
+      } else {
+        this.$store.commit("SET_LIVELIST", []);
+      }
+
+      this.newPopup(param);
+      this.viewer.flyToPosition(
+        new this.DC.Position(
+          Number(param.jd),
+          Number(param.wd),
+          300,
+          Number(param.heading),
+          Number(param.pitch),
+          Number(param.roll)
+        ),
+        () => {},
+        0.5
+      );
+    },
+
+    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);
+    },
+  },
+};
 </script>
 
-<style lang='scss' scope>
-.map-campus-serarch {
-    position: fixed;
-    top: 100px;
-    left: 0;
-    right: 0;
-    bottom: auto;
-    margin: auto;
-    width: 320px;
+<style lang="scss" scope>
+.map-campus-search {
+  position: fixed;
+  top: 100px;
+  left: 0;
+  right: 0;
+  bottom: auto;
+  margin: auto;
+  width: 330px;
+  min-height: 40px;
+  max-height: 360px;
+  height: auto;
+  z-index: 11;
+  border-radius: 5px;
+  box-shadow: 0 0 14px 2px rgb(221, 221, 221);
+
+  .search-input {
+    float: left;
+    width: 250px;
     height: 40px;
-    z-index: 11;
+    border-radius: 5px 0 0 5px;
 
-    .search-input {
-        float: left;
-        width: 240px;
-        border-radius: 5px 0 0 5px;
+    input {
+      box-sizing: border-box;
+      border-radius: 5px 0 0 5px;
+    }
+  }
 
-        input {
-            border-radius: 5px 0 0 5px;
-        }
+  .el-button-group {
+    float: left;
+    width: 80px;
+
+    .el-button {
+      margin: 0;
+      padding: 0;
+      width: 40px;
+      height: 40px !important;
+      position: relative;
+      border-radius: 0;
+      border: 1px solid #dcdfe6;
+
+      i {
+        margin: auto;
+        position: absolute;
+        top: 0;
+        left: 0;
+        right: 0;
+        bottom: 0;
+      }
     }
 
-    .el-button-group {
-        float: left;
-        width: 80px;
+    .el-button:nth-child(1) {
+      border-left: none;
+      border-right: none;
+    }
 
-        .el-button {
-            margin: 0;
-            position: relative;
-            width: 40px;
-            height: 40px;
-            border-radius: 0;
+    .el-button:nth-child(2) {
+      border-left: none;
+      border-right: none;
+      border-radius: 0 5px 5px 0;
+    }
+  }
+
+  .search-value-box {
+    position: absolute;
+    top: 41px;
+    left: 0;
+    width: auto;
+    min-width: 250px;
+    max-height: 520px;
+    background: #fff;
+    overflow-y: auto;
+    box-shadow: 0 0 14px 2px rgb(221, 221, 221);
+    border-radius: 5px;
+
+    ul {
+      li {
+        padding-left: 20px;
+        height: 36px;
+        line-height: 36px;
+        cursor: pointer;
+      }
+
+      li:hover {
+        background: #f5f5f5;
+      }
+    }
+  }
+
+  .map-campus-shortcut {
+    margin-top: 20px;
+    width: 100%;
+    // height: 330px;
+    height: auto;
+    background: #fff;
+    border-radius: 5px;
+
+    .shortcut-box {
+      padding-top: 36px;
+      height: auto;
+      ul {
+        display: flex;
+        width: 100%;
+        height: auto;
+        justify-content: flex-start;
+        flex-wrap: wrap;
+
+        li {
+          margin: 0 13px;
+          width: 84px;
+          height: 76px;
+
+          .el-button {
+            width: 80px;
+            height: 70px;
+            padding: 6px 12px;
+            background: #efefef;
             border: none;
+            border-radius: 5px;
+            box-sizing: border-box;
+            text-align: center;
 
-            i {
-                margin: auto;
-                position: absolute;
-                top: 0;
-                left: 0;
-                right: 0;
-                bottom: 0;
+            & > span {
+              width: auto;
+              height: auto;
+
+              img {
+                margin-top: 4px;
+                width: 26px;
+                height: 26px;
+              }
+
+              span {
+                display: block;
+                font-size: 14px;
+                line-height: 28px;
+              }
             }
-        }
+          }
 
-        .el-button:nth-child(2) {
-            border-radius: 0 5px 5px 0;
+          .el-button:focus {
+            border: 1px solid #000;
+          }
         }
+      }
     }
+  }
 }
 </style>

--
Gitblit v1.9.3