北京经济技术开发区经开区虚拟城市项目-【前端】-Web
lixuliang
2024-05-08 10ecfd0b60442d209d1ab4b749580ffb638d1992
src/components/menu/bottom-menu.vue
@@ -1,6 +1,9 @@
<template>
  <div class="specialTool">
    <div class="bottomwrapper" :class="{ 'top-btn-active': viewer1Show && isLand }">
    <div
      class="bottomwrapper"
      :class="{ 'top-btn-active': viewer1Show && isLand }"
    >
      <div class="imgbox" @click="tdglHandle">
        <img src="@assets/img/new/tudiguanli.png" alt="" />
      </div>
@@ -9,7 +12,11 @@
      </div>
    </div>
    <div class="bottomwrapper" @click="historyHandle" :class="{ 'top-btn-active': viewer1Show && !isLand }">
    <div
      class="bottomwrapper"
      @click="historyHandle"
      :class="{ 'top-btn-active': viewer1Show && !isLand }"
    >
      <div class="imgbox">
        <img src="@assets/img/new/chengshigengxin.png" alt="" />
      </div>
@@ -17,25 +24,32 @@
        <span> 历史影像 </span>
      </div>
    </div>
    <div class="bottomwrapper csbj">
      <el-dropdown trigger="click" @command="handleCommand">
        <div class="imgbox">
          <img src="@assets/img/new/chengshibujian.png" alt="" />
        </div>
        <div class="textbox">
          <span> 综合扩展 </span>
        </div>
        <el-dropdown-menu slot="dropdown" :append-to-body="false" class="popper-dropdown">
          <el-dropdown-item command="stdsjHandle">视图大数据平台</el-dropdown-item>
          <el-dropdown-item command="bzdSystem">标准地监管平台</el-dropdown-item>
          <el-dropdown-item v-if="isShowSPJK" command="spjkHandle">视频集成与可视化</el-dropdown-item>
          <el-dropdown-item v-else command="closeSpjk">关闭视频点位分布</el-dropdown-item>
          <el-dropdown-item v-if="isShowSjxl" command="sjxlHandle">手机信令热力分布</el-dropdown-item>
          <el-dropdown-item v-else command="closeSjxl">关闭信令热力分布</el-dropdown-item>
          <el-dropdown-item command="csgxHandle">城市更新</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    <div
      class="bottomwrapper csbj"
      @click="spjkHandle"
      :class="{ 'top-btn-active': !isShowSPJK }"
    >
      <div class="imgbox">
        <img src="@assets/img/new/spjk.png" alt="" />
      </div>
      <div class="textbox">
        <span>视频监控</span>
      </div>
    </div>
    <div
      class="bottomwrapper spjk"
      @click="shoujixinling"
      :class="{ 'top-btn-active': !isShowSjxl }"
    >
      <div class="imgbox">
        <img src="@assets/img/new/sjxl.png" alt="" />
      </div>
      <div class="textbox">
        <span> 手机信令 </span>
      </div>
    </div>
    <div class="bottomwrapper jxmx">
      <el-dropdown trigger="click" @command="handleCommand">
        <div class="imgbox">
@@ -44,11 +58,19 @@
        <div class="textbox">
          <span> 精模示范 </span>
        </div>
        <el-dropdown-menu slot="dropdown" :append-to-body="false" class="popper-dropdown">
        <el-dropdown-menu
          slot="dropdown"
          :append-to-body="false"
          class="popper-dropdown"
        >
          <el-dropdown-item command="fcfhHandle">分层分户</el-dropdown-item>
          <!-- <el-dropdown-item command="sprhHandle">场景视频融合</el-dropdown-item> -->
          <el-dropdown-item v-if="isShowSPRH" command="jiqirendahui">场景视频融合</el-dropdown-item>
          <el-dropdown-item v-else command="jiqirendahui">关闭视频融合</el-dropdown-item>
          <el-dropdown-item v-if="isShowSPRH" command="jiqirendahui"
            >场景视频融合</el-dropdown-item
          >
          <el-dropdown-item v-else command="jiqirendahui"
            >关闭视频融合</el-dropdown-item
          >
        </el-dropdown-menu>
      </el-dropdown>
    </div>
@@ -63,39 +85,86 @@
            @input="updateVideo"
          >
          </el-slider> -->
          <el-slider :min="0" :max="360" v-model="robotVideoList[3].heading" @input="updateVideo">
          <el-slider
            :min="0"
            :max="360"
            v-model="robotVideoList[3].heading"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="俯仰角度:">
          <el-slider :min="-89" :max="89" v-model="robotVideoList[3].pitch" @input="updateVideo">
          <el-slider
            :min="-89"
            :max="89"
            v-model="robotVideoList[3].pitch"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="水平视角:">
          <el-slider :min="30" :max="120" v-model="robotVideoList[3].horizonAngle" @input="updateVideo">
          <el-slider
            :min="30"
            :max="120"
            v-model="robotVideoList[3].horizonAngle"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="垂直视角:">
          <el-slider :min="30" :max="120" v-model="robotVideoList[3].verticalAngle" @input="updateVideo">
          <el-slider
            :min="30"
            :max="120"
            v-model="robotVideoList[3].verticalAngle"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="最远投射:">
          <el-slider :min="100" :max="300" v-model="robotVideoList[3].far" @input="updateVideo">
          <el-slider
            :min="100"
            :max="300"
            v-model="robotVideoList[3].far"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
        <el-form-item label="透明度:">
          <el-slider :step="0.1" :min="0" :max="1" v-model="robotVideoList[3].alpha" @input="updateVideo">
          <el-slider
            :step="0.1"
            :min="0"
            :max="1"
            v-model="robotVideoList[3].alpha"
            @input="updateVideo"
          >
          </el-slider>
        </el-form-item>
      </el-form>
    </div>
    <!-- 数组人文字输入弹框 -->
    <div class="SZRtextAreaBox" v-if="isShowTextArea">
      <el-row :gutter="10">
        <el-col :span="19">
          <el-input
            v-model="input"
            placeholder="请输入内容"
            clearable
            @keyup.enter.native="sendCommand($event)"
          ></el-input>
        </el-col>
        <el-col :span="4">
          <el-button type="primary" @click="sendCommand('click')"
            >搜索</el-button
          >
        </el-col>
      </el-row>
    </div>
  </div>
</template>
<style scoped>
.specialTool {
  width: 440px;
  width: 550px;
  position: absolute;
  bottom: 65px;
  color: #fff;
@@ -106,9 +175,33 @@
  display: flex;
  justify-content: space-between;
}
.SZRtextAreaBox {
  background: rgba(5, 39, 126, 0.7);
  padding: 10px;
  width: 375px;
  position: absolute;
  /* display: flex; */
  /* justify-content: space-around; */
  bottom: 165px;
  color: #fff;
  left: 50%;
  transform: translateX(-50%);
  z-index: 99999;
}
.SZRtextAreaBox .el-form-item {
  margin: 0;
}
.SZRtextAreaBox .el-input {
  /* width: 300px; */
}
.specialTool .bottomwrapper:nth-of-type(3) {
  /* background: red; */
  position: relative;
  top: -30px;
}
.specialTool .bottomwrapper:nth-of-type(2),
.specialTool .bottomwrapper:nth-of-type(3) {
.specialTool .bottomwrapper:nth-of-type(4) {
  /* background: red; */
  position: relative;
  top: -18px;
@@ -122,18 +215,22 @@
}
.imgbox {
  width: 84px;
  height: 81px;
  background-image: url("~@/assets/img/new/bottomBox.png");
  width: 110px;
  height: 90px;
  background-image: url("~@/assets/img/new/b1.png");
  background-size: 100% 100%;
  position: relative;
}
.imgbox:hover {
  background-image: url("~@/assets/img/new/h1.png");
}
.imgbox img {
  width: 38px;
  width: 32px;
  position: absolute;
  top: 50%;
  left: 52.5%;
  top: 37%;
  left: 50%;
  transform: translate(-50%, -50%);
}
@@ -180,21 +277,22 @@
  background: rgba(14, 50, 143, 0.6);
  box-shadow: 0px 0px 9px 3px rgba(20, 105, 233, 0.7) inset;
  text-align: center;
  left: -36.5% !important;
  width: 155px;
  border: none;
}
.el-dropdown /deep/ .el-dropdown-selfdefine {
  margin-left: 8px !important;
  margin-left: 0 !important;
}
.csbj .el-dropdown-menu {
  top: -215px !important;
  top: -180px !important;
  left: -30.5% !important;
}
.jxmx .el-dropdown-menu {
  top: -110px !important;
  left: -26.5% !important;
}
.el-dropdown-menu /deep/ .el-dropdown-menu__item {
@@ -207,19 +305,22 @@
}
.csbj .el-popper /deep/ .popper__arrow::after {
  margin: 0;
  border-top-color: rgba(14, 50, 143, 0.6);
  border-top-width: 6px;
  border-bottom-width: 0;
  top: 201px;
  left: 37px;
  top: 166px;
  left: 31px;
}
.jxmx .el-popper /deep/ .popper__arrow::after {
  margin: 0;
  border-top-color: rgba(14, 50, 143, 0.6);
  border-top-width: 6px;
  border-bottom-width: 0;
  top: 96px;
  left: -26px;
  left: -32px;
}
.el-dropdown-menu__item:focus,
@@ -232,8 +333,9 @@
  box-shadow: 0px 0px 5px 3px rgba(0, 168, 255, 0.16);
}
.top-btn-active {
  background: #0987ff !important;
.top-btn-active .imgbox {
  background-image: url("~@/assets/img/new/h1.png");
  background-size: 100% 100%;
}
.scroll_div {
@@ -270,7 +372,8 @@
let video4;
let heatMapItem;
import { mapState, mapMutations } from "vuex";
import { queryBySquare } from "@/utils/request";
import { queryBySquare } from "@/api/api";
import Bus from "../tools/Bus";
import { roman } from "../../assets/json/index.js";
import URLInCode from "@/assets/js/urlInCode";
@@ -286,6 +389,7 @@
      isShowSPRH: true,
      csbjShow: false,
      jxmxShow: false,
      input: "",
      romanOption: [
        { name: "核心区" },
        { name: "景观绿地" },
@@ -315,7 +419,6 @@
          far: 3000,
          cameraIndexCode: "2b046ef675704975a8d45f1b00cd946b",
        },
      ],
      robotVideoList: [
        {
@@ -414,6 +517,12 @@
  },
  computed: {
    ...mapState(["viewer1Show", "isLand", "yqfk", "qyEchartsShow"]),
    isShowTextArea() {
      if (this.$store.state.isShowTextArea) {
        this.input = "";
      }
      return this.$store.state.isShowTextArea;
    },
  },
  methods: {
    ...mapMutations(["setViewer1Show", "setIsLand", "setqyEchartsShow"]),
@@ -429,11 +538,17 @@
          break;
      }
    },
    sendCommand(event) {
      // if (event == "click") {
      mapMsg.testMsg(this.input);
      // } else {
      // // 阻止默认行为(如果需要的话)
      // mapMsg.testMsg(this.input);
      // event.preventDefault();
      // }
    },
    handleCommand(command) {
      switch (command) {
        case "qytj":
          this.qytj();
          break;
        case "spjkHandle":
          this.spjkHandle();
          break;
@@ -458,17 +573,15 @@
        case "closeSjxl":
          this.closeSjxl();
          break;
        case "csgxHandle":
          this.csgxHandle();
          break;
        case "jiqirendahui":
          this.jiqirendahui(this.robotVideoList);
          break;
      }
    },
    historyHandle() {
      this.switchMenu(1);
      if (this.isLand) {
        this.$parent.changeMode('影像底图');
        this.$parent.changeMode("影像底图");
        if (!this.viewer1Show) {
          window.loading = this.$loading({
            lock: true,
@@ -481,7 +594,7 @@
        this.setViewer1Show(true);
      } else {
        if (!this.viewer1Show) {
          this.$parent.changeMode('影像底图');
          this.$parent.changeMode("影像底图");
          window.loading = this.$loading({
            lock: true,
            text: "影像对比功能加载中,请稍后",
@@ -494,8 +607,22 @@
      }
    },
    tdglHandle() {
      this.switchMenu(1);
      if (!this.isLand) {
        if (!this.viewer1Show) {
          let p = sgworld.Navigate.getCameraInfo();
          sgworld.Navigate.flyToPointsInterest({
            destination: new Cesium.Cartesian3.fromDegrees(
              p.location.lon,
              p.location.lat,
              p.location.height
            ),
            orientation: {
              heading: Cesium.Math.toRadians(0),
              pitch: Cesium.Math.toRadians(-90),
              roll: Cesium.Math.toRadians(0),
            },
          });
          window.loading = this.$loading({
            lock: true,
            text: "土地管理功能加载中,请稍后",
@@ -507,6 +634,19 @@
        this.setViewer1Show(true);
      } else {
        if (!this.viewer1Show) {
          let p = sgworld.Navigate.getCameraInfo();
          sgworld.Navigate.flyToPointsInterest({
            destination: new Cesium.Cartesian3.fromDegrees(
              p.location.lon,
              p.location.lat,
              p.location.height
            ),
            orientation: {
              heading: Cesium.Math.toRadians(0),
              pitch: Cesium.Math.toRadians(-90),
              roll: Cesium.Math.toRadians(0),
            },
          });
          window.loading = this.$loading({
            lock: true,
            text: "土地管理功能加载中,请稍后",
@@ -525,63 +665,36 @@
        "http://10.9.2.29:8080/#/login?token=1ed14c5157acb8088efe65bc93a032c3"
      );
    },
    switchMenu(id) {
      if (id != 1) {
        this.setViewer1Show(false);
      }
      if (id != 3) {
        this.closeSjxl();
      }
      if (id != 4) {
        this.closeSpjk();
      }
    },
    bzdSystem() {
      window.open("http://192.162.24.2:8076/login");
    },
    shoujixinling() {
      const loading = this.$loading({
        lock: true,
        text: "手机信令数据加载中,请稍后",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
      });
      setTimeout(() => {
        loading.close();
      }, 2000);
      this.isShowSjxl = false;
      let heatMapUrl = URLInCode.heatMapUrl;
      sgworld.Core.getJSON(heatMapUrl, (data) => {
        let res = [];
        data.features.forEach((item) => {
          let obj = {
            x: item.properties["center_x"],
            y: item.properties["center_y"],
            value: item.properties["sd_total"],
            radius: 50,
          };
          res.push(obj);
        });
        // //创建热力图
        heatMapItem = sgworld.Creator.addHeatMap("热力图", {
          type: "Heatmap", // 热力图类型【Heatmap/HeatmapGL】(可选)
          sourceData: res,
          radius: 7,
          gradient: {
            ".3": "blue",
            ".5": "green",
            ".7": "yellow",
            ".95": "red",
          },
          tooltip: true, // tooltip显示数值
        });
      });
      this.switchMenu(3);
      if (this.isShowSjxl) {
        this.isShowSjxl = false;
        this.$parent.signallingShow = true;
      } else {
        this.closeSjxl();
      }
    },
    closeSjxl() {
      if (heatMapItem) {
        this.isShowSjxl = true;
        heatMapItem.deleteObject();
      }
      this.isShowSjxl = true;
      this.$parent.signallingShow = false;
    },
    // historyHandle() {
    //   this.$store.commit("showHistory", true);
    // },
    csgxHandle() {
      Bus.$emit("openMyResourcePop", true);
    },
    qytj() {
      this.setqyEchartsShow(!this.qyEchartsShow);
    },
    sceneRoaming() {
      if (this.showFlag) {
        document.getElementById("scroll").style.display = "none";
@@ -623,42 +736,49 @@
      });
    },
    spjkHandle() {
      const loading = this.$loading({
        lock: true,
        text: "视频点位数据加载中,请稍后",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
      });
      setTimeout(() => {
        loading.close();
      }, 2000);
      this.isShowSPJK = false;
      if (window.sxtkGeojson) {
        window.sxtkGeojson.deleteObject();
        window.sxtkGeojson = null;
        window.sxthandler.destroy();
        //关闭弹窗
        Bus.$emit("closeRightPop", true);
        layuiLayer.close(SmartEarthPopupData.layerProp);
        return;
      this.switchMenu(4);
      if (this.isShowSPJK) {
        const loading = this.$loading({
          lock: true,
          text: "视频点位数据加载中,请稍后",
          spinner: "el-icon-loading",
          background: "rgba(0, 0, 0, 0.7)",
        });
        setTimeout(() => {
          loading.close();
        }, 1500);
        this.isShowSPJK = false;
        if (window.sxtkGeojson) {
          window.sxtkGeojson.deleteObject();
          window.sxtkGeojson = null;
          window.sxthandler.destroy();
          //关闭弹窗
          Bus.$emit("closeRightPop", true);
          layuiLayer.close(SmartEarthPopupData.layerProp);
          return;
        } else {
          Bus.$emit("showSPJK");
          // this.spjkLoad();
        }
      } else {
        Bus.$emit("showSPJK");
        // this.spjkLoad();
        this.closeSpjk();
      }
    },
    closeSpjk() {
      this.isShowSPJK = true;
      if (window.sxtkGeojson) {
        window.sxtkGeojson.deleteObject();
        window.sxtkGeojson = null;
        window.sxthandler.destroy();
        //关闭弹窗
        Bus.$emit("closeRightPop", true);
        layuiLayer.close(SmartEarthPopupData.layerProp);
        return;
      } else {
        Bus.$emit("closeSPJK");
        // this.spjkLoad();
      if (!this.isShowSPJK) {
        this.isShowSPJK = true;
        if (window.sxtkGeojson) {
          window.sxtkGeojson.deleteObject();
          window.sxtkGeojson = null;
          window.sxthandler.destroy();
          //关闭弹窗
          Bus.$emit("closeRightPop", true);
          layuiLayer.close(SmartEarthPopupData.layerProp);
          return;
        } else {
          Bus.$emit("closeSPJK");
          // this.spjkLoad();
        }
      }
    },
    // 分层分户