From a3fadb577e4d18c1d7ff60e23be4f3d27f63b9a3 Mon Sep 17 00:00:00 2001
From: liuyg <376836862@qq.com>
Date: Mon, 17 Jan 2022 17:07:52 +0800
Subject: [PATCH] +

---
 src/components/map/components/mapPopup.vue |  219 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 161 insertions(+), 58 deletions(-)

diff --git a/src/components/map/components/mapPopup.vue b/src/components/map/components/mapPopup.vue
index c5209fc..675dd4e 100644
--- a/src/components/map/components/mapPopup.vue
+++ b/src/components/map/components/mapPopup.vue
@@ -72,6 +72,11 @@
                                                     <i class="popup-icon live-action-nav deblurring"></i>
                                                     实景
                                                 </li>
+                                                <li v-show="panoramaUrl != null && panoramaUrl != ''"
+                                                    @click="monitorClick">
+                                                    <i class="popup-icon monitor-nav deblurring"></i>
+                                                    监控
+                                                </li>
                                             </ul>
                                         </div>
                                         <div v-show="teachList.length > 0 || liveList.length > 0"
@@ -85,20 +90,21 @@
                                                     @click="tabBtnClick('生活服务')">生活服务</li>
                                             </ul>
                                             <div class="btm-content">
-                                                <div class="on">
+                                                <div :class="{'on': tabBtnFlag == '教学科研行政'}">
                                                     <ul>
                                                         <li v-for="(item, index) in teachList"
                                                             :key="index"
-                                                            @click="mechanismDetailPopup(item)">
+                                                            @click="mechanismDetailPopup(0, item)">
                                                             <i class="popup-icon location-icon deblurring"></i>
                                                             {{item}}
                                                         </li>
                                                     </ul>
                                                 </div>
-                                                <div>
+                                                <div :class="{'on': tabBtnFlag == '生活服务'}">
                                                     <ul>
                                                         <li v-for="(item, index) in liveList"
-                                                            :key="index">
+                                                            :key="index"
+                                                            @click="mechanismDetailPopup(1, item)">
                                                             <i class="popup-icon location-icon deblurring"></i>
                                                             {{item}}
                                                         </li>
@@ -117,6 +123,7 @@
                     </div>
                 </div>
             </div>
+
             <div v-if="panoramaPopup"
                  class="panorama-dom"
                  id="PanoramaBox">
@@ -141,11 +148,39 @@
                     </div>
                 </div>
             </div>
+
+            <div v-if="monitorPopup"
+                 class="monitor-dom"
+                 id="MonitorBox">
+                <div style="width: 100%; height: 100%;">
+                    <div class="monitor-container">
+                        <div class="monitor-wrap">
+                            <div class="content-wrap">
+                                <div class="title">
+                                    {{stateName}}
+                                    <img @click="closeMonitorPopupBox"
+                                         class="close-box"
+                                         src="/img/navicon/close.png"
+                                         alt="">
+                                </div>
+                                <div class="content">
+                                    <video :src="monitorUrl"
+                                           controls
+                                           autoplay></video>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="arrow"></div>
+                    </div>
+                </div>
+            </div>
         </div>
 
         <!-- 二维码弹框相关 -->
         <el-dialog title="场景二维码"
                    :visible.sync="QRCodeFlag"
+                   :modal="false"
+                   :modal-append-to-body="false"
                    width='44%'>
             <div style="margin: 0; position: relative; width: 100%; height: 352px;">
                 <img width="260"
@@ -169,18 +204,6 @@
                   :preview-src-list="popupImgAtlas"
                   ref="popupImgs">
         </el-image>
-
-        <campusNav ref="campusNavRoute"
-                   :comeName="comeName"
-                   :getToName="getToName"
-                   v-show="campusNavFlag" />
-
-        <audio ref="audioControlPlay"
-               style="position: fixed; left: 111111111px;"
-               v-html="audioSource"
-               @ended="overAudio">
-
-        </audio>
     </div>
 </template>
 
@@ -194,12 +217,12 @@
         return {
             DC: null,
             tabBtnFlag: '教学科研行政',
-            campusNavFlag: false,
-            comeName: '',
-            getToName: '',
             QRCodeFlag: false,
             audioSource: '',
-            audioFlag: false
+            audioFlag: false,
+            audioCourse: false,
+            audioSynth: null,
+            audioMsg: null
         }
     },
     computed: {
@@ -221,47 +244,98 @@
             'telephone',
             // 介绍
             'introduceText',
-            // 全景地址
-            'panoramaUrl',
             // 详情弹框显示关闭
             'detailsPopup',
+            // 全景地址
+            'panoramaUrl',
             // 全景弹框显示关闭
             'panoramaPopup',
+            // 监控地址
+            'monitorUrl',
+            // 监控弹框显示关闭
+            'monitorPopup',
 
             'popupImgAtlas',
             // 教学
             'teachList',
             // 科研
-            'liveList'
+            'liveList',
+            // 社区内导航的显示关闭
+            'campusNavFlag'
         ])
     },
     created () {
         this.DC = global.DC
+
+        this.audioSynth = window.speechSynthesis
+        this.audioMsg = new window.SpeechSynthesisUtterance()
+
+        this.audioMsg.onend = function () {
+            this.audioSynth.cancel()
+            this.audioFlag = false
+            this.audioCourse = false
+        }
+    },
+    watch: {
+        introduceText: {
+            immediate: true,
+            handler (newQuestion, oldQuestion) {
+                this.audioSource = newQuestion
+                if (this.audioFlag == true) {
+                    this.audioSynth.cancel()
+                    this.audioFlag = false
+                    this.audioCourse = false
+                }
+            }
+        },
+        teachList: {
+            immediate: true,
+            handler (newCode, oldCode) {
+                if (newCode.length > 0) {
+                    this.tabBtnFlag = '教学科研行政'
+                }
+            }
+        },
+        liveList: {
+            immediate: true,
+            handler (newCode, oldCode) {
+                if (newCode.length > 0 && this.teachList.length == 0) {
+                    this.tabBtnFlag = '生活服务'
+                }
+            }
+        },
+        detailsPopup: {
+            immediate: true,
+            handler (newCode, oldCode) {
+                if (newCode == false) {
+                    this.audioSynth.cancel()
+                    this.audioFlag = false
+                    this.audioCourse = false
+                } else {
+                    if (this.audioFlag == true) {
+                        this.audioSynth.cancel()
+                        this.audioFlag = false
+                        this.audioCourse = false
+                    }
+                }
+            }
+        }
     },
     methods: {
         tabBtnClick (param) {
             this.tabBtnFlag = param
         },
 
-        closeCampusNav () {
-            this.campusNavFlag = false
-            this.$refs.campusNavRoute.clearLayer()
-            this.$store.commit('SET_STARTINGPOINT', null)
-            this.$store.commit('SET_TERMINUS', null)
-            this.comeName = ''
-            this.getToName = ''
-        },
-
         comeHereClick () {
-            this.comeName = this.stateName
+            this.$store.commit('SET_COMENAME', this.stateName)
             this.$store.commit('SET_TERMINUS', this.pointPosition)
-            if (this.campusNavFlag == false) this.campusNavFlag = true
+            if (this.campusNavFlag == false) this.$store.commit('SET_CAMPUSNAVFLAG', true)
         },
 
         getToHereClick () {
-            this.getToName = this.stateName
+            this.$store.commit('SET_GETTONAME', this.stateName)
             this.$store.commit('SET_STARTINGPOINT', this.pointPosition)
-            if (this.campusNavFlag == false) this.campusNavFlag = true
+            if (this.campusNavFlag == false) this.$store.commit('SET_CAMPUSNAVFLAG', true)
         },
 
         qrCodeClick () {
@@ -274,9 +348,11 @@
 
         panoramaClick () {
             if (this.audioFlag == true) {
-                this.$refs.audioControlPlay.pause()
+                this.audioSynth.cancel()
                 this.audioFlag = false
+                this.audioCourse = false
             }
+
             // eslint-disable-next-line new-cap
             var positions = this.DC.Transform.transformWGS84ToCartesian(new this.DC.Position.fromArray(this.pointPosition))
             this.viewer.scene.globe.depthTestAgainstTerrain = false
@@ -287,16 +363,39 @@
                     positions
                 ]
             })
+
             this.$store.commit('SET_DETAILSPOPUP', false)
+            this.$store.commit('SET_MONITORPOPUP', false)
             this.$store.commit('SET_PANORAMAPOPUP', true)
+        },
+
+        monitorClick () {
+            if (this.audioFlag == true) {
+                this.audioSynth.cancel()
+                this.audioFlag = false
+                this.audioCourse = false
+            }
+            // eslint-disable-next-line new-cap
+            var positions = this.DC.Transform.transformWGS84ToCartesian(new this.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, {
+                domId: 'MonitorBox',
+                position: [
+                    positions
+                ]
+            })
+            this.$store.commit('SET_PANORAMAPOPUP', false)
+            this.$store.commit('SET_DETAILSPOPUP', false)
+            this.$store.commit('SET_MONITORPOPUP', true)
         },
 
         closeMapPopupBox () {
             if (this.audioFlag == true) {
-                this.$refs.audioControlPlay.pause()
+                this.audioSynth.cancel()
                 this.audioFlag = false
+                this.audioCourse = false
             }
-            this.audioSource = ''
             this.$store.commit('SET_DETAILSPOPUP', false)
         },
 
@@ -305,31 +404,30 @@
             this.$store.commit('SET_PANORAMAPOPUP', false)
         },
 
+        closeMonitorPopupBox () {
+            this.$store.commit('SET_MONITORURL', '')
+            this.$store.commit('SET_MONITORPOPUP', false)
+        },
+
         audioPlay () {
-            if (this.audioSource == '') {
-                var zhText = encodeURI(this.$refs.DomIntroduceText.innerText)
-                this.audioSource = `<source src="http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=4&text=${zhText}" type="audio/mpeg"><embed height="0" width="0" src="http://tts.baidu.com/text2audio?text=${zhText}">`
-                console.log(this.audioSource)
-                this.$refs.audioControlPlay.play()
+            if (this.audioFlag == false) {
+                this.audioMsg.text = this.audioSource
+                this.audioSynth.speak(this.audioMsg)
                 this.audioFlag = true
+                this.audioCourse = true
             } else {
-                if (this.audioFlag == true) {
-                    this.$refs.audioControlPlay.pause()
-                    this.audioFlag = false
+                if (this.audioCourse == true) {
+                    this.audioSynth.pause()
+                    this.audioCourse = false
                 } else {
-                    this.$refs.audioControlPlay.play()
-                    this.audioFlag = true
+                    this.audioSynth.resume()
+                    this.audioCourse = true
                 }
             }
         },
 
-        overAudio () {
-            this.audioFlag = false
-        },
-
-        mechanismDetailPopup (param) {
-            getMechanismDetail({ mechanismname: param }).then(res => {
-                console.log(res)
+        mechanismDetailPopup (num, param) {
+            getMechanismDetail({ num: num, mechanismName: param }).then(res => {
                 var result = res.data.data
                 this.$store.commit('CLEAR_ALL', null)
 
@@ -344,9 +442,13 @@
                 this.$store.commit('SET_INTRODUCETEXT', result.introduce)
                 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), 3000, Number(result.heading), Number(result.pitch), Number(result.roll)),
+                    new this.DC.Position(Number(result.jd), Number(result.wd), 300, Number(result.heading), Number(result.pitch), Number(result.roll)),
                     function () {
                     },
                     3
@@ -355,7 +457,7 @@
         },
 
         newPopup (item) {
-            const position = this.DC.Transform.transformWGS84ToCartesian(new this.DC.Position(Number(item.jd), Number(item.wd), Number(item.gd), Number(item.heading), Number(item.pitch), Number(item.roll)))
+            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',
@@ -365,6 +467,7 @@
             })
 
             this.$store.commit('SET_PANORAMAPOPUP', false)
+            this.$store.commit('SET_MONITORPOPUP', false)
             this.$store.commit('SET_DETAILSPOPUP', true)
         }
     }

--
Gitblit v1.9.3