shuishen
2022-03-18 bf58722dfd03ea1513f3acc7331d4d4403fca76e
src/components/map/components/mapPopup.vue
@@ -66,7 +66,7 @@
                          <i class="popup-icon start-nav deblurring"></i>
                          出发
                        </li>
                        <li v-show="false" @click="qrCodeClick">
                        <li v-show="pupupQRUrl != ''" @click="qrCodeClick">
                          <i class="popup-icon qr-code-nav deblurring"></i>
                          二维码
                        </li>
@@ -166,6 +166,12 @@
                id="FullScreenBox"
              >
                <div class="title">
                  <img
                    @click="returnDetailsPopup"
                    class="return-btn"
                    src="/img/icon/return.png"
                    alt
                  />
                  {{ stateName }}
                  <img
                    @click="screen"
@@ -200,6 +206,12 @@
            <div class="monitor-wrap">
              <div class="content-wrap">
                <div class="title">
                  <img
                    @click="returnDetailsPopup"
                    class="return-btn"
                    src="/img/icon/return.png"
                    alt
                  />
                  {{ stateName }}
                  <img
                    @click="closeMonitorPopupBox"
@@ -261,6 +273,157 @@
          </div>
        </div>
      </div>
      <div v-if="labelLayerDataShow" class="divForms-dom" id="labelLayerid">
        <div style="width: 100%; height: 100%">
          <div class="divForms divForms-theme">
            <div class="divForms-wrap">
              <div class="area">
                <div class="arrow-lt"></div>
                <div class="b-t"></div>
                <div class="b-r"></div>
                <div class="b-b"></div>
                <div class="b-l"></div>
                <div class="arrow-rb"></div>
                <div class="label-wrap">
                  <div class="title">
                    {{ nowlabelLayerData.name }}
                    <img
                      @click="closelabelLayerid"
                      class="close-box"
                      src="/img/navicon/close.png"
                      alt
                    />
                  </div>
                  <div class="add-tag-content" style="height: 250px">
                    <!-- data:image/png;base64, -->
                    <img
                      :src="nowlabelLayerData.qrcode"
                      alt
                      class="labelLayeridewm"
                      style="width: 250px; height: 250px"
                    />
                  </div>
                </div>
              </div>
              <div class="b-t-l"></div>
              <div class="b-b-r"></div>
            </div>
            <div class="arrow"></div>
          </div>
        </div>
      </div>
    </div>
    <!-- 新增编辑标签 -->
    <div
      v-if="addIconsLayerIconPopup"
      class="monitor-dom add-sign-box-style"
      id="leftNavsAdd"
    >
      <div style="width: 100%; height: 100%">
        <div class="divForms divForms-theme">
          <div class="divForms-wrap">
            <div class="area">
              <div class="arrow-lt"></div>
              <div class="b-t"></div>
              <div class="b-r"></div>
              <div class="b-b"></div>
              <div class="b-l"></div>
              <div class="arrow-rb"></div>
              <div class="label-wrap">
                <div class="title">
                  <el-input
                    v-model="addIconFromcolumn[0].value"
                    placeholder="请输入标签名称"
                    class="addIconFromInput"
                  >
                    <template slot="prepend">标题:</template>
                  </el-input>
                  <img
                    @click="closeaddIconsLayerIconPopup"
                    class="close-box"
                    src="/img/navicon/close.png"
                    alt
                  />
                </div>
                <div class="add-tag-content">
                  <div class="addIconsLayer">
                    <div
                      :class="[
                        'addIconsLayerinimgs',
                        ourImages.length > 3 ? 'isOverImgs' : '',
                      ]"
                    >
                      <!-- action="https://jsonplaceholder.typicode.com/posts/" -->
                      <el-upload
                        :action="
                          apiUrls +
                          '/blade-resource/oss/endpoint/put-files-talk'
                        "
                        list-type="picture-card"
                        :on-preview="handlePictureCardPreview"
                        :on-remove="handleRemove"
                        :on-success="onsuccess"
                      >
                        <i class="el-icon-plus"></i>
                      </el-upload>
                      <el-dialog
                        :visible.sync="dialogVisible"
                        :modal-append-to-body="false"
                        :append-to-body="true"
                      >
                        <img width="100%" :src="dialogImageUrl" alt />
                      </el-dialog>
                    </div>
                    <div
                      class="addIconsLayerin"
                      v-for="(item, index) in addIconFromcolumn"
                      :key="index"
                      v-show="index != 0"
                    >
                      <el-input
                        v-model="item.value"
                        :placeholder="'请输入' + item.label"
                        class="addIconFromInput"
                        :disabled="index == 2 || index == 3"
                      >
                        <template slot="prepend">{{ item.label }}:</template>
                      </el-input>
                      <el-dropdown
                        v-show="index == 2 || index == 3"
                        @command="chouseAddicon"
                      >
                        <span class="el-dropdown-link">
                          <i class="el-icon-arrow-down el-icon--right"></i>
                        </span>
                        <el-dropdown-menu slot="dropdown">
                          <el-dropdown-item
                            v-for="(itemc, indexc) in item.chouse"
                            :key="indexc"
                            :command="{ index: index, indexc: indexc }"
                            >{{ itemc.value }}</el-dropdown-item
                          >
                          <!-- @click="chouseAddicon(index, indexc)" -->
                        </el-dropdown-menu>
                      </el-dropdown>
                    </div>
                  </div>
                  <div class="addIconsLayerBut">
                    <el-button type="primary" @click="saveIconsLayer"
                      >保存标签</el-button
                    >
                  </div>
                </div>
              </div>
            </div>
            <div class="b-t-l"></div>
            <div class="b-b-r"></div>
          </div>
          <div class="arrow"></div>
        </div>
      </div>
    </div>
    <!-- 二维码弹框相关 -->
@@ -313,12 +476,17 @@
import { mapGetters } from "vuex";
import { getMechanismDetail } from "@/api/pc/public/arc";
import { setlabel } from "@/api/pc/label";
import { add } from "@/api/pc/leftNav/index";
export default {
  name: "mapPopup",
  data() {
    return {
      DC: null,
      ourImages: [],
      dialogImageUrl: "",
      dialogVisible: false,
      apiUrls: null,
      tabBtnFlag: "教学科研行政",
      QRCodeFlag: false,
      audioSource: "",
@@ -329,12 +497,216 @@
      fullscreen: false,
      fullScreenUrl: "/img/icon/bigScreen.png",
      addTagName: "",
      addTagLayer: null,
      addIconFromcolumn: [
        // 顺序不要随便换
        {
          label: "名称",
          prop: "mechanismname",
          value: "",
        },
        {
          label: "电话",
          prop: "telephone",
          value: "",
        },
        {
          label: "所属建筑",
          prop: "type",
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=building",
          props: {
            label: "dictValue",
            value: "dictKey",
          },
          value: "红旗校区",
          valueid: "1",
          chouse: [
            {
              id: "1",
              value: "红旗校区",
            },
            {
              id: "2",
              value: "黄河路",
            },
            {
              id: "3",
              value: "科学园",
            },
            {
              id: "4",
              value: "土木楼",
            },
            {
              id: "5",
              value: "三江校区",
            },
          ],
        },
        {
          label: "所属社区",
          searchLabelWidth: "110",
          value: "行政办公",
          valueid: "1",
          prop: "campus",
          dicUrl: "/api/blade-system/dict-biz/dictionary?code=campus",
          chouse: [
            {
              id: "1",
              value: "行政办公",
            },
            {
              id: "2",
              value: "教学科研",
            },
            {
              id: "3",
              value: "社区场馆",
            },
            {
              id: "4",
              value: "学生宿舍",
            },
            {
              id: "5",
              value: "文化风景",
            },
            {
              id: "6",
              value: "家属住宅",
            },
            {
              id: "7",
              value: "主要楼宇",
            },
          ],
        },
        {
          label: "介绍",
          prop: "introduce",
          value: "",
          component: "AvueUeditor",
          options: {
            action: "/api/blade-resource/oss/endpoint/put-file",
            props: {
              res: "data",
              url: "link",
            },
          },
          hide: true,
          minRows: 5,
          span: 24,
        },
        {
          label: "地址",
          hide: true,
          prop: "address",
          value: "",
        },
        {
          label: "全景地址",
          prop: "panoramaurl",
          value: "",
        },
        {
          label: "监控地址",
          hide: true,
          prop: "videourl",
          value: "",
        },
        {
          label: "网站地址",
          prop: "websiteurl",
          value: "",
        },
        {
          label: "经度",
          prop: "jd",
          value: "",
          rules: [
            {
              required: true,
              message: "请输入经度",
              trigger: "blur",
            },
          ],
        },
        {
          label: "纬度",
          prop: "wd",
          value: "",
          rules: [
            {
              required: true,
              message: "请输入纬度",
              trigger: "blur",
            },
          ],
        },
        {
          label: "偏航角",
          addDisplay: false,
          hide: true,
          prop: "heading",
          value: 0,
        },
        {
          label: "俯仰角",
          addDisplay: false,
          hide: true,
          prop: "pitch",
          value: -90,
        },
        {
          label: "翻转角",
          addDisplay: false,
          hide: true,
          prop: "roll",
          value: 0,
        },
        {
          label: "高度",
          hide: true,
          addDisplay: false,
          prop: "gd",
          value: 0,
        },
        // {
        //   label: "图片",
        //   prop: "tpurl",
        //   value: "",
        //   // dataType: 'string',
        //   type: "upload",
        //   propsHttp: {
        //     res: "data",
        //     url: "link",
        //   },
        //   span: 10,
        //   listType: "picture-card",
        //   tip: "只能上传jpg/png文件,且不超过500kb",
        //   action: "/api/blade-resource/oss/endpoint/put-file",
        // },
        // {
        //   label: "二维码",
        //   prop: "codeurl",
        //   value: "",
        //   type: "upload",
        //   listType: "picture-card",
        //   //dataType: 'string',
        //   action: "/api/blade-resource/oss/endpoint/put-file",
        //   propsHttp: {
        //     res: "data",
        //     url: "link",
        //   },
        //   span: 10,
        // },
      ],
    };
  },
  computed: {
    ...mapGetters([
      "viewer",
      "popupBgUrl",
      "pupupQRUrl",
      // 终点
@@ -367,14 +739,19 @@
      "teachList",
      // 科研
      "liveList",
      // 社区内导航的显示关闭
      // 校区内导航的显示关闭
      "campusNavFlag",
      "addTagPopup",
      "addTagPosition",
      // 自定义标签弹窗
      "labelLayerDataShow",
      "nowlabelLayerData",
      "addIconsLayerIconPopup", // 自定义标签编辑窗口
      "addIconsLayerIconPosition", // 自定义标签坐标
    ]),
  },
  created() {
    this.DC = global.DC;
    this.apiUrls = window.$apiUrls;
    this.audioSynth = window.speechSynthesis;
    this.audioMsg = new window.SpeechSynthesisUtterance();
@@ -385,8 +762,38 @@
      this.audioCourse = false;
    };
  },
  mounted() {},
  mounted() {
    global.viewer.scene.globe.depthTestAgainstTerrain = false;
  },
  watch: {
    addIconsLayerIconPopup() {
      if (this.addIconsLayerIconPopup) {
        this.addIconFromcolumn[9].value = this.addIconsLayerIconPosition[0];
        this.addIconFromcolumn[10].value = this.addIconsLayerIconPosition[1];
      } else {
        for (const k in this.addIconFromcolumn) {
          if (k == 2) {
            this.addIconFromcolumn[k].value = "红旗校区";
            this.addIconFromcolumn[k].valueid = "1";
            continue;
          }
          if (k == 3) {
            this.addIconFromcolumn[k].value = "行政办公";
            this.addIconFromcolumn[k].valueid = "1";
            continue;
          }
          this.addIconFromcolumn[k].value = "";
        }
        this.ourImages = [];
        this.$store.commit("set_closeMapClick", false); // 开启其他操作
      }
    },
    addTagPopup() {
      if (!this.addTagPopup) {
        // console.log("取消", "see");
        this.$store.commit("set_closeMapClick", false);
      }
    },
    introduceText: {
      immediate: true,
      handler(newQuestion, oldQuestion) {
@@ -432,6 +839,66 @@
    },
  },
  methods: {
    onsuccess(response, file, fileList) {
      this.ourImages = fileList;
    },
    handleRemove(file, fileList) {
      this.ourImages = fileList;
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    chouseAddicon(item) {
      this.addIconFromcolumn[item.index].value =
        this.addIconFromcolumn[item.index].chouse[item.indexc].value;
      this.addIconFromcolumn[item.index].valueid =
        this.addIconFromcolumn[item.index].chouse[item.indexc].id;
    },
    closeaddIconsLayerIconPopup() {
      this.$store.commit("SET_addIconsLayerIconPopup", false);
    },
    saveIconsLayer() {
      var imgs = [];
      // console.log("see", this.ourImages);
      // return;
      for (var k in this.ourImages) {
        imgs.push(this.ourImages[k].response);
      }
      const d = {
        tpurl: imgs.join(","),
        mechanismname: this.addIconFromcolumn[0].value,
        telephone: this.addIconFromcolumn[1].value,
        type: this.addIconFromcolumn[2].valueid,
        campus: this.addIconFromcolumn[3].valueid,
        introduce: this.addIconFromcolumn[4].value,
        address: this.addIconFromcolumn[5].value,
        panoramaurl: this.addIconFromcolumn[6].value,
        videourl: this.addIconFromcolumn[7].value,
        websiteurl: this.addIconFromcolumn[8].value,
        jd: this.addIconFromcolumn[9].value,
        wd: this.addIconFromcolumn[10].value,
        heading: this.addIconFromcolumn[11].value,
        pitch: this.addIconFromcolumn[12].value,
        roll: this.addIconFromcolumn[13].value,
        gd: this.addIconFromcolumn[14].value,
      };
      // console.log(d, "see3");
      // return;
      // this.$store.commit("set_closeMapClick", false); //开启其他操作
      add(d).then(
        () => {
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          this.closeaddIconsLayerIconPopup();
        },
        (error) => {
          window.console.log(error);
        }
      );
    },
    screen() {
      if (this.fullscreen) {
        this.fullScreenUrl = "/img/icon/bigScreen.png";
@@ -482,13 +949,13 @@
      }
      // eslint-disable-next-line new-cap
      var positions = this.DC.Transform.transformWGS84ToCartesian(
      var positions = global.DC.Transform.transformWGS84ToCartesian(
        // eslint-disable-next-line new-cap
        new this.DC.Position.fromArray(this.pointPosition)
        new global.DC.Position.fromArray(this.pointPosition)
      );
      this.viewer.scene.globe.depthTestAgainstTerrain = false;
      // eslint-disable-next-line no-unused-vars
      var panorama = new this.DC.PanoramaBox(this.viewer, {
      var panorama = new global.DC.PanoramaBox(global.viewer, {
        domId: "PanoramaBox",
        position: [positions],
      });
@@ -505,19 +972,40 @@
        this.audioCourse = false;
      }
      // eslint-disable-next-line new-cap
      var positions = this.DC.Transform.transformWGS84ToCartesian(
      var positions = global.DC.Transform.transformWGS84ToCartesian(
        // eslint-disable-next-line new-cap
        new this.DC.Position.fromArray(this.pointPosition)
        new global.DC.Position.fromArray(this.pointPosition)
      );
      this.viewer.scene.globe.depthTestAgainstTerrain = false;
      // eslint-disable-next-line no-unused-vars
      var monitor = new this.DC.PanoramaBox(this.viewer, {
      var monitor = new global.DC.PanoramaBox(global.viewer, {
        domId: "MonitorBox",
        position: [positions],
      });
      this.$store.commit("SET_PANORAMAPOPUP", false);
      this.$store.commit("SET_DETAILSPOPUP", false);
      this.$store.commit("SET_MONITORPOPUP", true);
    },
    returnDetailsPopup() {
      var positions = global.DC.Transform.transformWGS84ToCartesian(
        // eslint-disable-next-line new-cap
        new global.DC.Position.fromArray(this.pointPosition)
      );
      // eslint-disable-next-line no-unused-vars
      var divBox = new global.DC.PanoramaBox(global.viewer, {
        domId: "divFormsDomBox",
        position: [positions],
      });
      global.viewer.zoomToPosition(
        // eslint-disable-next-line new-cap
        new global.DC.Position.fromArray(this.pointPosition)
      );
      this.$store.commit("SET_DETAILSPOPUP", true);
      this.$store.commit("SET_MONITORPOPUP", false);
      this.$store.commit("SET_PANORAMAPOPUP", false);
    },
    closeMapPopupBox() {
@@ -533,7 +1021,11 @@
    closeAddTagBox() {
      this.$store.commit("SET_ADDTAGPOPUP", false);
    },
    closelabelLayerid() {
      this.$store.commit("openLabelLayer", {
        show: false,
      });
    },
    createTag() {
      var that = this;
@@ -546,21 +1038,22 @@
      this.$store.commit("SET_ADDTAGPOPUP", false);
      //   if (this.addTagLayer == null) {
      //     this.addTagLayer = new this.DC.HtmlLayer("addTagLayer");
      //     this.viewer.addLayer(this.addTagLayer);
      //   }
      //2022.3.2对接接口
      // 2022.3.2对接接口
      // 新增标签
      let data = {
      const data = {
        name: this.RemoveTheBlank(this.addTagName),
        jd: this.addTagPosition.lng,
        wd: this.addTagPosition.lat,
      };
      //   console.log(data);
      let oks = setTimeout(() => {
        that.$message({
          message: "新增标签失败",
          type: "warning",
        });
      }, 5000);
      setlabel(data).then((res) => {
        console.log(res);
        clearTimeout(oks);
        if (res.data.code == 200) {
          doit();
          that.$message({
@@ -575,26 +1068,11 @@
        }
        that.addTagName = "";
      });
      let doit = () => {
        that.$store.commit("addLabelLayerIcon", { list: [data], add: true });
        // const divIcon = new this.DC.DivIcon(
        //   new that.DC.Position(
        //     Number(that.addTagPosition.lng),
        //     Number(that.addTagPosition.lat),
        //     0
        //   ),
        //   `
        //                 <div class="tag-entitys-box">
        //                     <div class="tag-content">
        //                         ${that.addTagName}
        //                     </div>
        //                     <div class="tag-angle-content">
        //                         <img src="https://map.hit.edu.cn/images/tarrow_xq.png">
        //                     </div>
        //                 </div>
        //             `
        // );
        // this.addTagLayer.addOverlay(divIcon);
      const doit = () => {
        that.$store.dispatch("addLabelLayerIcon", {
          // list: [data],
          add: true,
        });
      };
    },
@@ -653,8 +1131,8 @@
        }
        this.newPopup(result);
        this.viewer.flyToPosition(
          new this.DC.Position(
        global.viewer.flyToPosition(
          new global.DC.Position(
            Number(result.jd),
            Number(result.wd),
            300,
@@ -669,11 +1147,15 @@
    },
    newPopup(item) {
      const position = this.DC.Transform.transformWGS84ToCartesian(
        new this.DC.Position(Number(item.jd), Number(item.wd), Number(item.gd))
      const position = global.DC.Transform.transformWGS84ToCartesian(
        new global.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, {
      var popup = new global.DC.DivForms(global.viewer, {
        domId: "divFormsDomBox",
        position: [position],
      });
@@ -693,4 +1175,32 @@
};
</script>
<style></style>
<style lang="scss">
.labelLayeridewm {
  width: 250px !important;
  height: 250px !important;
}
.add-sign-box-style {
  input:-moz-placeholder,
  textarea:-moz-placeholder {
    color: #fff;
  }
  input:-ms-input-placeholder,
  textarea:-ms-input-placeholder {
    color: #fff;
  }
  input::-webkit-input-placeholder,
  textarea::-webkit-input-placeholder {
    color: #fff;
  }
  .addIconsLayerinimgs {
    margin-top: 4px;
  }
  .addIconsLayerin {
    padding: 0 10px;
  }
}
</style>