tremble 3 سال پیش
والد
کامیت
b1e822a9c4
40فایلهای تغییر یافته به همراه2553 افزوده شده و 906 حذف شده
  1. 0 2
      web/public/index.html
  2. 0 1
      web/public/scene.html
  3. 16 15
      web/public/static/css/main.css
  4. 781 0
      web/public/static/data/first_floor.json
  5. 693 0
      web/public/static/data/floor_1152.json
  6. 574 0
      web/public/static/data/second_floor.json
  7. 1 1
      web/public/static/js/CAD/bundle.js
  8. 62 54
      web/public/static/js/CAD/loadCAD.js
  9. 0 152
      web/public/static/js/lib/ddfullscreen/ddfullscreenslider.css
  10. 0 291
      web/public/static/js/lib/ddfullscreen/ddfullscreenslider.js
  11. 21 7
      web/public/static/js/main_2020_show.js
  12. BIN
      web/src/assets/images/icon/bigscene/like.png
  13. BIN
      web/src/assets/images/icon/bigscene/like_active.png
  14. BIN
      web/src/assets/images/icon/bigscene/likexuliezhen.png
  15. BIN
      web/src/assets/images/icon/loading.gif
  16. BIN
      web/src/assets/images/project/CD.png
  17. BIN
      web/src/assets/images/project/biglogo.png
  18. BIN
      web/src/assets/images/project/jin.png
  19. BIN
      web/src/assets/images/project/tong.png
  20. BIN
      web/src/assets/images/project/yin.png
  21. 10 0
      web/src/assets/style/public.less
  22. 42 5
      web/src/components/exhibition/index.vue
  23. 44 3
      web/src/components/hotspot/audio.vue
  24. 36 27
      web/src/components/hotspot/image.vue
  25. 4 0
      web/src/components/hotspot/index.vue
  26. 28 21
      web/src/components/hotspot/video.vue
  27. 21 36
      web/src/components/popupLayout/Loading.vue
  28. 0 1
      web/src/components/popupLayout/index.js
  29. 11 0
      web/src/mixins/index.js
  30. 0 244
      web/src/newcomponents/hovercom/commentator/data.js
  31. 44 11
      web/src/newcomponents/hovercom/dati/index.vue
  32. 2 2
      web/src/newcomponents/huizhang/huizhang.vue
  33. 43 4
      web/src/newcomponents/xunirenwu/index.vue
  34. 20 2
      web/src/views/collection/index.vue
  35. 1 1
      web/src/views/index/data.js
  36. 13 3
      web/src/views/index/index.vue
  37. 33 17
      web/src/views/message/Message.vue
  38. 46 3
      web/src/views/scene/gui/menu.vue
  39. 6 2
      web/src/views/scene/index.vue
  40. 1 1
      web/src/views/scene/scene.vue

+ 0 - 2
web/public/index.html

@@ -9,7 +9,6 @@
     <meta name="format-detection" content="telephone=no">
     <link rel="icon" href="<%= BASE_URL %>favicon.png">
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/js/lib/scrollbar/perfect-scrollbar.css"/>
-    <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/js/lib/ddfullscreen/ddfullscreenslider.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/css/animate.min.css"/>
 
     <title>解放军总医院医学院门户网站</title>
@@ -19,7 +18,6 @@
     <script src="<%= VUE_APP_STATIC_DIR %>/js/lib/jquery-2.1.1.min.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/lib/jquery.mousewheel.min.js"></script>
     <script src="<%= VUE_APP_STATIC_DIR %>/js/lib/scrollbar/perfect-scrollbar.min.js"></script>
-    <script src="<%= VUE_APP_STATIC_DIR %>/js/lib/ddfullscreen/ddfullscreenslider.js"></script>
 
   </body>
 </html>

+ 0 - 1
web/public/scene.html

@@ -12,7 +12,6 @@
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/css/tooltipster.bundle.min.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/css/tooltipster-sideTip-borderless.min.css"/>
     <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/css/main.css?v=2.25"/>
-    <link rel="stylesheet" href="<%= VUE_APP_STATIC_DIR %>/CAD/cad.css?v=2.25"/>
     <script>
         var number = window.location.href.substring(window.location.href.indexOf("=") + 1);
         if (number.indexOf("&") != -1) {

+ 16 - 15
web/public/static/css/main.css

@@ -2514,8 +2514,8 @@ body, html {
     width: 40px;
     height: 40px;
     border: 3px solid transparent;
-    border-top-color: #00b4ed;
-    border-left-color: #00b4ed;
+    border-top-color: #FFE0A6;
+    border-left-color: #FFE0A6;
     border-radius: 40px;
     -webkit-animation: gui-spinner .5s linear infinite;
     -moz-animation: gui-spinner .5s linear infinite;
@@ -3296,7 +3296,7 @@ a.hasHover:hover, a:active {
     height: 10px;
     top: 0px;
     left: 0px;
-    background: #00b4ed;
+    background: #FFE0A6;
     border-radius: 5px;
     overflow: hidden;
 }
@@ -3308,7 +3308,7 @@ a.hasHover:hover, a:active {
     height: 64px;
     -webkit-border-radius: 16px;
     border-radius: 16px;
-    background: #00b4ed;
+    background: #FFE0A6;
     -webkit-animation: sparkle 1500ms linear infinite;
     -moz-animation: sparkle 1500ms linear infinite;
     -o-animation: sparkle 1500ms linear infinite;
@@ -3598,7 +3598,7 @@ a.hasHover:hover, a:active {
 }
 
 #gui .shareContainer a i.icon:hover, .ui-icon.socialButton.active::before {
-    color: #00b4ed
+    color: #FFE0A6
 }
 
 .menuOverlay ul li:last-child {
@@ -3715,7 +3715,7 @@ a.hasHover:hover, a:active {
 }
 
 .gui-floor.hasHover:hover {
-    border-color: #00b4ed;
+    border-color: #FFE0A6;
 }
 
 .gui-floor .container {
@@ -3762,8 +3762,8 @@ a.hasHover:hover, a:active {
 }
 
 .gui-floor.open {
-    border-color: #00b4ed;
-    /* color:#00b4ed */
+    border-color: #FFE0A6;
+    /* color:#FFE0A6 */
 }
 
 .gui-floor.open .container {
@@ -3776,7 +3776,8 @@ a.hasHover:hover, a:active {
     text-align: center;
     font-weight: bold;
     position: relative;
-    top: -8px;
+    font-size: 12px;
+    top: -5px;
     left: -1px;
 }
 
@@ -3845,12 +3846,12 @@ a.hasHover:hover, a:active {
 
 #view-controllers .active {
     padding: 4px;
-    color: #00b4ed;
-    border: 1px solid#00b4ed
+    color: #FFE0A6;
+    border: 1px solid#FFE0A6
 }
 
 #view-controllers>div.active:hover {
-    color: #00b4ed
+    color: #FFE0A6
 }
 
 #view-controllers.wide {
@@ -4224,7 +4225,7 @@ a.hasHover:hover, a:active {
 }
 
 #progressBar .step.active::before, #progressBar .step.recent::before {
-    background-color: #00b4ed
+    background-color: #FFE0A6
 }
 
 #progressBar .step.upcoming::before {
@@ -4620,7 +4621,7 @@ a.hasHover:hover, a:active {
 }
 
 .footer-help.open a {
-    color: #00b4ed
+    color: #FFE0A6
 }
 
 .footer.mobile .footer-help a.hasHover:hover {
@@ -4628,7 +4629,7 @@ a.hasHover:hover, a:active {
 }
 
 .footer.mobile .footer-help.open a.hasHover:hover {
-    color: #00b4ed
+    color: #FFE0A6
 }
 
 #tag-billboards {

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 781 - 0
web/public/static/data/first_floor.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 693 - 0
web/public/static/data/floor_1152.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 574 - 0
web/public/static/data/second_floor.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
web/public/static/js/CAD/bundle.js


+ 62 - 54
web/public/static/js/CAD/loadCAD.js

@@ -1,7 +1,6 @@
 window.grendCAD = (function grendCAD() {
   let initFloor
-  let initScript
-  let initDOM
+  // let initDOM
   let point, dire
 
   window.cad = {
@@ -11,48 +10,35 @@ window.grendCAD = (function grendCAD() {
     }
   }
 
-  function loadScript(cb) {
-    if (initScript) return cb()
-
-    let $script = document.createElement('script')
-    $script.src = '//www.4dmodel.com/CAD/bundle.js'
-    $script.onload = function() {
-      initScript = true
-      cb()
-    }
-
-    document.documentElement.appendChild($script)
-  }
-
-  function loadDOM($parent) {
-    if (initDOM) return initDOM;
+  function loadDOM($parent,id) {
+    // if (initDOM) return initDOM;
     let $layer = document.createElement('div')
     let $cad = document.createElement('div')
 
-    $layer.className = 'cad'
-    $cad.id = 'cad'
+    $layer.className = id
+    $cad.id = id
     $layer.appendChild($cad)
 
 
     let style = document.createElement('style')
     style.innerHTML = `
-      .cad {
-        position: absolute;
-        right: 80px;
-        top: 16px;
-        width: 200px;
+      .${id} {
+        position: fixed;
+        right: -260px;
+        top: 90px;
+        width: 260px;
         height: 200px;
-        background: rgba(0, 0, 0, .3);
-        border-radius: 5px;
+        z-index: 99;
+        transition: all 0.3s ease;
       }
 
-      .cad > div {
+      .${id} > div {
         width: 100%;
         height: 100%;
       }
 
       @media only screen and (max-width: 600px) { 
-        .cad {
+        .${id} {
             position: absolute;
             left: 16px;
             top: 65px;
@@ -64,10 +50,9 @@ window.grendCAD = (function grendCAD() {
       }
     `
 
-    document.documentElement.appendChild(style)
-    document.documentElement.appendChild($layer)
     $parent.appendChild(style)
     $parent.appendChild($layer)
+    
     return $layer
   }
 
@@ -84,22 +69,24 @@ window.grendCAD = (function grendCAD() {
       color: borderColor
     });
 
+    console.log('执行===============');
+
     cad.setDefaultSignStyle({
-      color: signColor
+      color: signColor,
+      r: 6,
     })
   }
 
 
-  return function(floor, $parent, signColor, borderColor, borderWidth) {
-    if (initFloor) {
-      console.log('cache')
-      return setStyle(signColor, borderColor, borderWidth)
-    }
+  return function(floor, $parent, signColor, borderColor, borderWidth, id) {
+    // if (initFloor) {
+    //   console.log('cache')
+    //   return setStyle(signColor, borderColor, borderWidth)
+    // }
     console.log('load')
     initFloor = floor
 
-    loadScript(function() {
-      let $layer = loadDOM($parent)
+      let $layer = loadDOM($parent,id)
 
       $layer.style.visibility = 'hidden'
       window.cad = structureCAD({
@@ -112,7 +99,7 @@ window.grendCAD = (function grendCAD() {
             "vertex-xy": [],
             "vertex-z": [],
         }, 
-        layer: $layer.querySelector('#cad'),
+        layer: $layer.querySelector('#'+id),
         edit: false
       });
       
@@ -122,30 +109,51 @@ window.grendCAD = (function grendCAD() {
   
       console.log('loadData')
       cad.loadData(initFloor);
+
       if (point && dire) {
         window.cad.setSign(point, dire)
       }
       $layer.style.visibility = 'visible'
-    })
 
   }
 })();
 
+if (window.number == '1149_2') {
+  $.ajax({
+    url: 'static/data/first_floor.json', 
+    method: 'GET',
+    success(res) {
+      grendCAD(res, document.documentElement, '#4f7d71', '#fcf5d3', '1px','cad1')
+      $.ajax({
+        url: 'static/data/second_floor.json', 
+        method: 'GET',
+        success(res) {
+          grendCAD(res, document.documentElement, '#4f7d71', '#fcf5d3', '1px','cad')
+        }
+      })
+    }
+  })
+}
+
+if (window.number == '1152_1') {
+  $.ajax({
+    url: 'static/data/floor_1152.json', 
+    method: 'GET',
+    success(res) {
+      grendCAD(res, document.documentElement, '#4f7d71', '#fcf5d3', '1px','cad')
+    }
+  })
+}
+
 
-$.ajax({
-  url: g_Prefix + "data/" + window.number + "/someData.json" + "?" + Date.now(),
-  method: 'GET',
-  success(data) {
-    if (!data.showCad) return
+// $.ajax({
+//   url: g_Prefix + "data/" + window.number + "/someData.json" + "?" + Date.now(),
+//   method: 'GET',
+//   success(data) {
+//     if (!data.showCad) return
 
 
     
-    $.ajax({
-      url: '//super.4dage.com/data/'+ window.number +'/floor.json', 
-      method: 'GET',
-      success(res) {
-        grendCAD(res, document.documentElement, data.cadSignColor, data.cadBorderColor, data.cadBorderWidth)
-      }
-    })
-  }
-})
+    
+//   }
+// })

+ 0 - 152
web/public/static/js/lib/ddfullscreen/ddfullscreenslider.css

@@ -1,152 +0,0 @@
-html.fssopen, html.fssopen body{ /* class added to HTML element when full screen slider is open to hide potential body scrollbars */
-	width: 100%;
-	height: 100%;
-	top: 0;
-	left: 0;
-  margin: 0;
-	overflow: hidden;
-}
-
-section.dd_fullscreenslider{
-	position: fixed;
-	left: 0;
-	top: 0;
-	width: 100%;
-	height: 100%;
-  z-index: 2000;
-	font-size: 16px; /* base font size */
-	visibility: visible;
-	overflow: hidden;
-}
-
-div.slidewrapper{ /* wrapper DIV that surrounds the ARTICLE elements inside .dd_fullscreenslider */
-	width: 100%;
-	height: 100%;
-	position: absolute;
-	top: 0;
-	left: 0;
-	-webkit-transform: translate3d(0, 0, 0); /* to prevent flickering in iOS */
-	-moz-transition: -moz-transform 0.5s; /* actual duration controlled by script */
-	-webkit-transition: -webkit-transform 0.5s;
-	transition: transform 0.5s;
-}
-
-ul.fssnav{ /* UL list dynamically added by script for Slider navigation */
-  list-style: none;
-  display: none;
-  padding: 0;
-  margin: 0;
-	position: fixed;
-	top: 50%; /* vertically center menu */
-	right: 20px; /* distance from right edge of screen */
-	transform: translateY(-50%); /* vertically center menu */
-}
-
-ul.fssnav li{
-  margin-bottom: 15px;
-}
-
-ul.fssnav li a{
-  text-decoration: none;
-  border: 5px solid white; /* border color of nav links */
-  border-radius: 50%;
-  width: 10px; /* dimensions of nav links */
-  height: 10px;
-  display: block;
-	position: relative;
-  text-indent: -500px;
-	outline: none;
-  overflow: hidden;
-}
-
-ul.fssnav li a::after{ /* create "fill" element inside A */
-  content: "";
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  top: 100%;
-  left: 0;
-  background: white; /* color of "fill" element */
-  transition: top 0.5s; /* transition for "fill up" effect */
-}
-
-ul.fssnav li.selected a::after{
-  top: 0; /* fill up selected A element from bottom to top */
-}
-
-
-section.dd_fullscreenslider article.slide{ /* CSS for each slide */
-  width: 100%;
-  height: 100%;
-	display: block;
-	font-family: 'Lato', sans-serif; /* Use google font */
-	font-size: 1.2em;
-	line-height: 2em;
-	color: white;
-	overflow: hidden;
-  -webkit-box-sizing: border-box; /* include padding/ border as part of declared menu width */
-  -moz-box-sizing: border-box;
-	z-index: 1000;
-	-webkit-transform: translate3d(0, 0, 0); /* to prevent flickering in iOS */
-}
-
-section.dd_fullscreenslider article.slide h2{ /* H2 Header inside each slide */
-	font-size: 3em;
-	margin: 0;
-	line-height: 1.1em;
-	letter-spacing: 3px;
-}
-
-section.dd_fullscreenslider article.slide .scrollable{ /* Assign this class to elements within a slide that should be scrollable */
-	overflow: auto;
-}
-
-section.dd_fullscreenslider article.slide a{
-	color: yellow;
-}
-
-section.dd_fullscreenslider article.slide:nth-of-type(2){ /* 2nd demo slide bgcolor */
-	background: #22AFE2;
-}
-
-section.dd_fullscreenslider article.slide:nth-of-type(3){ /* 3rd demo slide bgcolor */
-	background: #88D332;
-}
-
-section.dd_fullscreenslider article.slide:nth-of-type(4){ /* 4th demo slide bgcolor */
-	background: #A36400;
-}
-
-section.dd_fullscreenslider div.closex{ /* Large x close button inside Slider */
-  width: 50px;
-  height: 50px;
-	overflow: hidden;
-  display: block;
-  position: fixed;
-  cursor: pointer;
-	text-indent: -1000px;
-	opacity: 0.8;
-  z-index: 1001;
-  top: 5px;
-  right: 3px;
-}
-
-section.dd_fullscreenslider div.closex::before, section.dd_fullscreenslider div.closex::after{ /* render large x inside close button */
-  content: "";
-  display: block;
-  position: absolute;
-  width: 100%;
-  height: 6px;
-  background: white; /* color of x button */
-  top: 50%;
-  margin-top: -3px;
-  -ms-transform: rotate(-45deg);
-  -webkit-transform: rotate(-45deg);
-  transform: rotate(-45deg);
-}
-
-section.dd_fullscreenslider div.closex::after{ /* render large cross inside close button */
-  -ms-transform: rotate(-135deg);
-  -webkit-transform: rotate(-135deg);
-  transform: rotate(-135deg);
-}

+ 0 - 291
web/public/static/js/lib/ddfullscreen/ddfullscreenslider.js

@@ -1,291 +0,0 @@
-/* DD Full Screen Slider
-* Created: May 20th, 2015 by DynamicDrive.com
-* Visit http://www.dynamicdrive.com/ for full source code
-*/
-
-var ddfullscreenslider = (function($){
-
-	document.createElement('section')
-	document.createElement('article')
-
-	var defaults = {
-		addHash: true,
-		sliderstate: 'open', // reserved for future use
-		keycodeNavigation: [40, 38], // keyCode codes for down and up naivagion, respectively
-		transitionDuration: '0.5s',
-		swipeconfig: {peekamount: 100, mousedrag: true},
-		onslide: function($slide, index){}
-	}
-
-	var transformprop = '' // variable to contain browser supported version of "transform" property
-
-	function supportstranslate3d(){ // based on http://stackoverflow.com/a/12621264/4360074
-	  if (!window.getComputedStyle) {
-	      return false;
-	  }
-	  var $el = $('<div style="position:absolute" />').appendTo(document.body)
-	  var has3d
-		$el.css('transform', 'translate3d(1px,1px,1px)')
-		has3d = $el.css('transform')
-		var findtransformprop = $el.get(0).style.cssText.match(/(\w|\-)*transform/i) // get "-vendor-transform" portion of CSS Text
-		transformprop = (findtransformprop)? findtransformprop[0] : 'transform'
-	  $el.remove()
-	
-	  return (has3d !== undefined && has3d.length > 0 && has3d !== "none");
-	}
-
-
-	var $window = $(window)
-	var $root =  $('html')
-
-	function ddfullscreenslider(setting){
-		var translatesupport = supportstranslate3d()
-		var s = $.extend({}, defaults, setting)
-		var $slider = $('#' + s.sliderid)
-		var $wrapper = $slider.find('div.slidewrapper').css({transitionDuration: s.transitionDuration})
-		var $slides = $()
-		var slideslength = 0
-		var $nav = $()
-		var thisslider = this
-		var selectedindx = 0
-		var hasharray = []
-		var mouseslidetimer
-		var swipeevts = {start:"", move:"", end:""}, swipestart = false, dy = 0, bounds = [,], scrollableclass = 'scrollable', bypassdrag = false
-		var initialrun= true // indicate whether this is first time slider has run. After page loads, variable becomes false
-
-		if (!translatesupport){
-			s.transitionDuration = parseFloat(s.transitionDuration) * 1000
-		}
-
-		/** Function to call always after a slide is shown */
-
-		function onslidealways($slide, index){
-			if (!initialrun && s.addHash){
-				var newhash = $nav.find('li').eq(selectedindx).find('a:eq(0)').attr('href')
-				if (history.replaceState){
-					history.replaceState(null, null, newhash)
-				}
-				else{
-					window.location.hash = newhash
-				}
-			}
-			s.onslide($slide, index) // user defined event handler
-		}
-
-		function hashtoselectedslide(hash){
-			for (var i=0; i<hasharray.length; i++){
-				if (hasharray[i][0] == hash){
-					return i
-					break
-				}
-			}
-			return 0
-		}
-
-		function applybounds(val, swipedir){
-			if (swipedir == "down"){
-				return (translatesupport)? Math.max(-parseInt(bounds[1]), val) : Math.max(-bounds[1], val)
-			}
-			else{
-				return (translatesupport)? Math.min(bounds[0], val) : Math.min(bounds[0], val)
-			}
-		}
-
-		function isscrollable($target){ // check element finger is on is contained inside a "scrollable" element that's actually scrollable (scrollHeight exceeds container height)
-			var $scrollel = $target.closest('.' + scrollableclass)
-			var scrollel
-			if ($scrollel.length == 1){
-				scrollel = $scrollel.get(0)
-				if (scrollel.offsetHeight < scrollel.scrollHeight){
-					return true
-				}
-			}
-			return false
-		}
-
-		/** Mousewheel and keyboard scroll related code. Requires jquery.mousewheel.min.js **/
-
-		function mouseslide(deltaY){
-			var targetindx = selectedindx
-			if (deltaY < 0) // mouse down
-				var targetindx = Math.min(slideslength-1, selectedindx+1)
-		  else if (deltaY > 0)
-				var targetindx = Math.max(0, selectedindx-1)
-			if (targetindx != selectedindx)
-				thisslider.slideTo(targetindx)
-		}
-
-		$slider.on('mousewheel', function(event){
-			clearTimeout(mouseslidetimer)
-			var deltaY = event.deltaY
-			mouseslidetimer = setTimeout(function(){
-				mouseslide(deltaY)
-			}, 100)
-			return false
-		})
-
-		$(document).on('keyup', function(e){
-			var targetindx = selectedindx
-			if (e.keyCode == s.keycodeNavigation[0]) // key to go to next slide
-				var targetindx = Math.min(slideslength-1, selectedindx+1)
-			else if (e.keyCode == s.keycodeNavigation[1]) // key to go to previous slide
-				var targetindx = Math.max(0, selectedindx-1)
-			if (targetindx != selectedindx)
-				thisslider.slideTo(targetindx)
-		})
-
-		/** Swipe/ Mouse Drag scroll related code **/
-
-		swipeevts.start = 'touchstart' + (s.swipeconfig.mousedrag? ' mousedown' : '')
-		swipeevts.move = 'touchmove.dragmove' + s.sliderid + (s.swipeconfig.mousedrag? ' mousemove.dragmove' + s.sliderid : '')
-		swipeevts.end = 'touchend' + (s.swipeconfig.mousedrag? ' mouseup' : '')
-
-		if (s.swipeconfig.mousedrag){
-			$wrapper.bind('click', function(e){
-				if ($wrapper.data('dy') != 0) // if dragging on belt instead of clicking on it
-					e.preventDefault() // prevent default action
-			})
-		}
-	
-  	$wrapper.bind(swipeevts.start, function(e){
-			bypassdrag = false
-  		var e = (e.type.indexOf('touch') != -1)? e.originalEvent.changedTouches[0] : e
-			if ( isscrollable( $(e.target) ) ){ // if target is contained inside a "scrollable" element
-				bypassdrag = true
-				return
-			}
-			swipestart = true
-			var mousey = e.pageY
-			dy = 0 // reset swipe amount
-			if (translatesupport){
-				$wrapper.css({transition: 'none'})
-			}
-			var initialy = -$window.outerHeight() * selectedindx
-			$wrapper.data({dy: dy})
-  		$(document).bind(swipeevts.move, function(e){
-				if (bypassdrag){
-					return
-				}
-  			var e = (e.type.indexOf('touch') != '-1')? e.originalEvent.changedTouches[0] : e
-  			dy=e.pageY-mousey //distance to move horizontally
-				var newy=initialy+dy
-				newy = applybounds(newy, (dy < 0)? 'down' : 'up')
-				if (translatesupport){
-					$wrapper.css('transform', 'translate3d(0, ' + newy + 'px, 0)')
-				}
-				else{
-	  			$wrapper.css('top', newy)
-				}
-				$wrapper.data({dy: dy})
-  			return false //cancel default drag action
-  		})
-			if (e.type == "mousedown")
-  			return false //cancel default drag action
-  	})
-
-  	$(document).bind(swipeevts.end, function(e){
-  		$(document).unbind(swipeevts.move)
-			if (!swipestart || bypassdrag)
-				return
-			if (dy != 0){ // if actual swipe has occured
-				if (dy < 0 && dy < -s.swipeconfig.peekamount) // if swipe down and more than peek amount
-					var targetindx = Math.min(slideslength-1, selectedindx+1)
-				else if (dy > 0 && dy > s.swipeconfig.peekamount) // if swipe up and more than peek amount
-					var targetindx = Math.max(0, selectedindx-1)
-				else
-					targetindx = selectedindx
-				thisslider.slideTo(targetindx)
-				if (e.type == "mouseup")
-					return false
-			}
-			swipestart = false
-  	})
-
-		/** CSS3 transition ontransitionend event  set up */
-
-		$wrapper.on('transitionend webkitTransitionEnd', function(e){
-			if (/transform/i.test(e.originalEvent.propertyName)){ // check event fired on "transform" prop
-				onslidealways($slides.eq(selectedindx), selectedindx)
-			}
-		})
-
-		/** Public functions **/
-
-		this.reloadSlides = function(){
-			$nav.remove()
-			hasharray = []
-			$nav = $('<ul class="fssnav" />')
-			$slides = $('article.slide').each(function(i){
-				var $curslide = $(this)
-				var anchorval = $curslide.attr('id') || 'slide' + (i+1)
-				anchorval = "#" + anchorval
-				hasharray.push([anchorval, i])
-				var title = $curslide.data('title') || anchorval
-				var $navli = $('<li><a href="' + anchorval +'" title="' + title +'">' + (i + 1) + '</a></li>').appendTo($nav)
-				var $navlink = $navli.find('a:eq(0)')
-				$navli.on('click touchstart', function(e){
-					thisslider.slideTo(i)
-				})
-			})
-			$nav.on('click touchstart touchend', function(e){
-  			var e = (e.type.indexOf('touch') != '-1')? e.originalEvent.changedTouches[0] : e
-				return false		
-			}).appendTo($slider)
-			slideslength = $slides.length
-			bounds = [0, $window.outerHeight() * (slideslength-1)]
-		}
-
-		this.openSlider = function(){
-			initialrun = false
-			bypassdrag = false
-			s.sliderstate = 'open'
-			$root.addClass('fssopen')
-			$slider.css('visibility', 'visible')
-		}
-
-		this.closeSlider = function(){
-			s.sliderstate = 'close'
-			bypassdrag = true
-			$root.removeClass('fssopen')
-			$slider.css({visibility:'hidden'})
-		}
-
-		this.slideTo = function(indx, noanimation){
-			var newy = $window.outerHeight() * indx
-			$nav.find('li').eq(selectedindx).removeClass('selected')
-			$nav.find('li').eq(indx).addClass('selected')
-			selectedindx = indx
-			if (translatesupport){
-				$wrapper.css({transition: (noanimation)? 'none' : transformprop + ' ' + s.transitionDuration})			
-				$wrapper.css('transform', 'translate3d(0, -' + newy + 'px, 0)')
-				if (noanimation){ // run callback immediately
-					onslidealways($slides.eq(selectedindx), selectedindx)
-				}
-			}
-			else{
-				$wrapper.stop().animate({top: -newy}, (noanimation)? 0 : s.transitionDuration, function(){
-					onslidealways($slides.eq(selectedindx), selectedindx)
-				})
-			}
-		}
-
-		/** Initialize and show slider **/
-
-		this.reloadSlides()
-		selectedindx = hashtoselectedslide(window.location.hash)
-		this.slideTo(selectedindx, true)
-		if (s.sliderstate == 'open'){
-			this.openSlider()
-		}
-
-		$(window).on('resize', function(){
-			thisslider.slideTo(selectedindx, true)
-			bounds = [0, $window.outerHeight() * (slideslength-1)]
-		})
-
-
-	} // end ddfullscreenslider def
-
-	return ddfullscreenslider 
-
-})(jQuery)

+ 21 - 7
web/public/static/js/main_2020_show.js

@@ -6863,7 +6863,11 @@ window.Modernizr = function(n, e, t) {
                 $(".floorChoice").on("click", function(e) {
                     l(e);
                     var n = $(this).data("index");
+                
                     "all" !== n ? (J.updateInteraction(Se.InteractionGui, "floor-control"),
+                    
+                    
+
                     t.player.gotoFloor(n),
                     J.track("showcase_gui", {
                         gui_action: "click_floor_select_button",
@@ -6887,6 +6891,16 @@ window.Modernizr = function(n, e, t) {
                 $(".gui-floor-number").text(" " + (e.floorIndex + 1)),
                 $(".floorChoice").removeClass("active"),
                 $(".floorChoice[data-index=" + e.floorIndex + "]").addClass("active")))
+                
+                if(e.floorIndex==0){
+                    $('.cad') && $('.cad').addClass('hidemap')
+                    $('.cad1') && $('.cad1').removeClass('hidemap')
+                } 
+
+                if(e.floorIndex==1){
+                    $('.cad1') && $('.cad1').addClass('hidemap')
+                    $('.cad') && $('.cad').removeClass('hidemap')
+                } 
             }
             function I(e) {
                 return e.describe().inTransition
@@ -22183,12 +22197,12 @@ window.Modernizr = function(n, e, t) {
 			//------end	 
 			n.prototype.closePopup = function() {//xzw  关闭热点页面
 				if(!g_currentHot) return;
-				g_currentHot = null;
-				var hotPop = document.getElementById('popup'); 
-				hotPop.style.display = "none";
-				document.querySelector(".popup-content").removeChild(document.getElementById("id1"));
-				$("#popup iframe:last").remove();
-                var _bgaudio = document.getElementById("bgaudio");
+				// g_currentHot = null;
+				// var hotPop = document.getElementById('popup'); 
+				// hotPop.style.display = "none";
+				// document.querySelector(".popup-content").removeChild(document.getElementById("id1"));
+				// $("#popup iframe:last").remove();
+                var g_bgAudio = document.getElementById("bgaudio");
                 //判断音乐是否暂停或者是否存在
                 /* if(g_bgAudio && g_bgAudio.paused && g_bgAudio.readyState != 0 && g_play === 1)
                 {
@@ -22873,7 +22887,7 @@ window.Modernizr = function(n, e, t) {
 
                     if(e.cameraChanged){
                         this.mode == "panorama" && window.cad && cad.setSign({ x: this.position.x, y: this.position.z }, this.cameraControls.controls.panorama.lon);
-                        
+                        // this.mode == "panorama" && window.cad1 && cad1.setSign({ x: this.position.x, y: this.position.z }, this.cameraControls.controls.panorama.lon);
                        
                     }
                     if(e.cameraChanged2){ //变化要更大些

BIN
web/src/assets/images/icon/bigscene/like.png


BIN
web/src/assets/images/icon/bigscene/like_active.png


BIN
web/src/assets/images/icon/bigscene/likexuliezhen.png


BIN
web/src/assets/images/icon/loading.gif


BIN
web/src/assets/images/project/CD.png


BIN
web/src/assets/images/project/biglogo.png


BIN
web/src/assets/images/project/jin.png


BIN
web/src/assets/images/project/tong.png


BIN
web/src/assets/images/project/yin.png


+ 10 - 0
web/src/assets/style/public.less

@@ -165,8 +165,18 @@ html,body{
 
   to {
     transform: rotate(-360deg);
+  }
+}
 
+@keyframes stoprotate {
+  from {
+    transform: rotate(0deg);
   }
+
+  to {
+    transform: rotate(0deg);
+  }
+
 }
 
 

+ 42 - 5
web/src/components/exhibition/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="parimaryExhibtion" :class="{daolanactive:isShow}">
     <div class="p-title">
-      <div class="ptleft">
+      <div class="ptleft" @click="loadother">
         <img  class="pbg" :src="require(`@/assets/images/project/exb.png`)" alt="">
         <img  class="lg" :src="require(`@/assets/images/project/hospital.png`)" alt="">
         <span>当前位置</span>
@@ -13,7 +13,7 @@
    
     </div>
     <div class="exh-con">
-      <img :src="require('@/assets/images/map.png')">
+      <!-- <img :src="require('@/assets/images/map.png')"> -->
     </div>
     <ul class="exhi-list">
       <li @click="handleItem(item)" v-for="(item,i) in list" :key="i">
@@ -105,6 +105,16 @@ export default {
     }
   },
   methods:{
+    loadother(){
+      
+$.ajax({
+  url: 'static/data/second_floor.json', 
+  method: 'GET',
+  success(res) {
+    grendCAD(res, document.documentElement, '#4f7d71', '#fcf5d3', '1px','cad1')
+  }
+})
+    },
     handleItem(item){
       this.current = item
       let { x, y, z, w } = item.quaternion
@@ -117,8 +127,16 @@ export default {
   },
   watch:{
     isShow(newVal){
-      let css =newVal? '10px':'-310px'
-      $('.cad').css({right:css})
+      let css =newVal? 8:-260
+
+      $('.cad1').css({right:css + 'px'})
+
+      if(window.number == '1149_2'){
+        $('.cad').css({right:(css - 30)+'px'})
+        $('.cad1').css({right:css + 'px'})
+      }else{
+        $('.cad').css({right:css + 'px'})
+      }
     }
   }
 }
@@ -150,7 +168,7 @@ export default {
     }
     .p-title {
       position: relative;
-      margin-bottom: 4px;
+      margin-bottom: 2px;
       .ptleft{
         position: absolute;
         bottom: 0;
@@ -195,6 +213,8 @@ export default {
       background-color: rgba(103, 97, 86, .7);
       border: 2px solid #E2C59A;
       padding: 20px 0;
+      width: 100%;
+      height: 200px;
       >img{
         width: 80%;
       }
@@ -240,4 +260,21 @@ export default {
     }
   }
 }
+</style>
+
+<style lang="less">
+
+#cad1{
+  .sign{
+    display: none!important;
+  }
+}
+
+.hidemap{
+  g > g{
+    &:not(.sign){
+      display: none!important;
+    }
+  }
+}
 </style>

+ 44 - 3
web/src/components/hotspot/audio.vue

@@ -24,7 +24,11 @@
     <div class="img-con">
       <template v-if="hotspot.title == '院歌'">
         <ul>
-          <li v-for="(item,i) in geciList" :key="i"> {{item.txt}} </li>
+          <li v-for="(item,i) in geciList" :key="i"> 
+            <span :class="{acitve:singleidx>idx}" v-for="(ii,idx) in item.txt" :key="idx">
+              {{ii}}
+            </span>
+          </li>
         </ul>
       </template>
       <p v-else>{{ hotspot.content }}</p>
@@ -76,7 +80,9 @@ export default {
       currentPosi: 0,
       allTime: 0,
       geci: tmp,
-      activeGeci:0
+      activeGeci:0,
+      singleidx: 0,
+      timer:null
     };
   },
   computed:{
@@ -97,9 +103,14 @@ export default {
       if (this.i_audio.paused) {
         this.i_audio.play();
         this.isPlay = true;
+        this.timer&&clearInterval(this.timer)
+        this.timer = setInterval(() => {
+          this.singleidx += 1
+        }, 350);
       } else {
         this.i_audio.pause();
         this.isPlay = false;
+        this.timer&&clearInterval(this.timer)
       }
     },
     transTime(time) {
@@ -134,6 +145,9 @@ export default {
       this.i_audio.currentTime = 0;
       this.i_audio.pause();
       this.isPlay = false;
+      this.activeGeci=0
+      this.singleidx=0
+      this.timer&&clearInterval(this.timer)
     },
 
     seekTime(e) {
@@ -142,6 +156,21 @@ export default {
       this.updateProgress();
     },
   },
+  watch:{
+    activeGeci(newVal,oldVal){
+      if (newVal) {
+        this.singleidx = 0
+        this.timer&&clearInterval(this.timer)
+        this.timer = setInterval(() => {
+          this.singleidx += 1
+        }, 350);
+      }
+
+    }
+  },
+  beforeDestroy(){
+    this.i_audio = null
+  },
   mounted() {
     this.$nextTick(() => {
       this.i_audio = $("#audioTag")[0];
@@ -262,6 +291,7 @@ export default {
     .cd {
       width: 70%;
       transition: 0.3s ease all;
+      animation: stoprotate 1s linear forwards;
     }
     .hk {
       position: absolute;
@@ -299,12 +329,23 @@ export default {
     }
     >ul{
       >li{
-        font-size: 14px;
         line-height: 1.5;
         margin: 10px 0;
+        text-align: left;
         transition: .3s ease all;
         &:first-of-type,&:last-of-type{
+          >span{
+            color: rgba(255, 224, 166, 0.4)!important;
+          }
+        }
+        >span{
+          font-size: 14px;
+          display: inline-block;
           color: rgba(255, 224, 166, 0.4);
+          transition: .4s ease all;
+          &.acitve{
+            color: rgba(255, 224, 166, 1);
+          }
         }
       }
     }

+ 36 - 27
web/src/components/hotspot/image.vue

@@ -14,28 +14,44 @@
         </ul>
       </div>
         <div class="title" v-html="hotspot.title"></div>
-        <div class="desc" v-html="hotspot.content">
+        <div class="desc" :style="{textAlign:hotspot.content.length>58?'justify':'center'}" v-html="handleContent(hotspot.content,16)">
       </div>
     </div>
 
+    
+
 </template>
 
 <script>
-import { directive } from "vue-awesome-swiper";
-// import style (<= Swiper 5.x)
-import "swiper/css/swiper.css";
 
 export default {
-  directives: {
-    swiper: directive,
-  },
+
   props:['hotspot'],
   data(){
     return {
       active:0,
+      to:null,
       mbactive:0
     }
   },
+  watch:{
+    active(){
+      setTimeout(() => {
+          this.$showLoading();
+      });
+
+      if (this.to) {
+        clearTimeout(this.to)
+        this.to = null
+      }
+      this.to = setTimeout(() => {
+        this.$hideLoading();
+      },1500);
+    }
+  },
+  beforeDestroy(){
+      this.$hideLoading();
+  },
   methods:{
     handlePage(type){
     if (type==='next') {
@@ -57,25 +73,18 @@ export default {
   },
   },
   computed:{
-    swiperOption() {
-      let that = this
-      return {
-        slidesPerView: 'auto',
-        autoplay: false,
-        centeredSlides: true,
-        watchSlidesProgress: true,
-        loop: this.hotspot.images.length>1,
-        pagination: {
-          el: '.swiper-pagination'
-        },
-        on:{
-          slideChangeTransitionEnd:function () {
-            that.mbactive = this.realIndex
-          }
-        }
-      }
+   
+  },
+  mounted() {
+    this.$showLoading();
+    if (this.TO) {
+      clearTimeout(this.TO)
+      this.TO = null
     }
-  }
+    this.TO = setTimeout(() => {
+      this.$hideLoading();
+    },800);
+  },
 }
 </script>
 
@@ -157,12 +166,12 @@ export default {
     margin: 0 auto;
     width: 70%;
     color: #fff;
-    text-align: center;
+    text-align: justify;
     line-height: 1.8;
     max-height: 120px;
     overflow-y: auto;
     font-size: 16px;
-    padding: 0;
+    padding-right: 10px;
   }
 }
 

+ 4 - 0
web/src/components/hotspot/index.vue

@@ -67,10 +67,14 @@ export default {
 
     // this.hotspot = Object.replaceAll( this.hotspot, this.is_bendi?"https://super.4dage.com/":"", "" );
 
+ 
 
     console.log(this.hotspot);
     
     !this.active && (this.active = 'vTitle')
+      if (this.hotspot.title=='院歌') {
+        this.active = 'vAudio'
+      }
 
     console.log(this.active);
   },

+ 28 - 21
web/src/components/hotspot/video.vue

@@ -2,7 +2,13 @@
   <div class="images">
     <div class="img-con">
       <span @click="active -= 1" :class="{ noshow: active <= 0 }">上一张</span>
-      <video controls autoplay>
+      <video controlslist="nodownload noremoteplayback"
+              disablePictureInPicture
+              controls
+              autoplay
+              v-show="isvideoshow"
+              @canplaythrough="isvideoshow = true"
+              @canplay="isvideoshow = true">
         <source :src="g_dealUrl(hotspot.video[active].url)" type="video/mp4" />
       </video>
       <span
@@ -38,29 +44,30 @@ export default {
   data() {
     return {
       active: 0,
-      mbactive: 0,
+      isvideoshow:false,
+      TO:null
     };
   },
-  computed: {
-    swiperOption() {
-      let that = this;
-      return {
-        slidesPerView: "auto",
-        autoplay: false,
-        centeredSlides: true,
-        watchSlidesProgress: true,
-        loop: false,
-        pagination: {
-          el: ".swiper-pagination",
-        },
-        on: {
-          slideChangeTransitionEnd: function() {
-            that.mbactive = this.realIndex;
-          },
-        },
-      };
-    },
+  watch:{
+    isvideoshow:{
+      handler:function (newVal){
+        if (newVal) {
+          this.$hideLoading();
+        }
+      }
+    }
   },
+  mounted() {
+    this.$showLoading();
+       if (this.TO) {
+        clearTimeout(this.TO)
+        this.TO = null
+      }
+      this.TO = setTimeout(() => {
+        this.$hideLoading();
+      },10*1000);
+  },
+ 
 };
 </script>
 

+ 21 - 36
web/src/components/popupLayout/Loading.vue

@@ -1,15 +1,10 @@
 <template>
-    <div class="ui-loading">
-      <!-- <img class="bg" :src="`${$cdn}images/bg.jpg`" alt=""> -->
-
+    <div class="ui-loading" >
       <div class="ui-con">
-        <div>
-          <img class="logo" :src="`${$cdn}images/k.png`" alt="">
-        </div>
-        <div>
-          <img class="loading" :src="`${$cdn}images/loading.png`" alt="">
+        <div class="ld-txt">
+           <img :src="require('@/assets/images/icon/loading.gif')" />
+           <p>加载中</p>
         </div>
-        <div class="ld-txt">loading...</div>
       </div>
     </div>
 </template>
@@ -18,10 +13,9 @@ export default {
     name: "ui-loading",
     data() {
         return {
-           
+           showBg:false
         };
     },
-    
 };
 </script>
 
@@ -30,37 +24,28 @@ export default {
   width: 100%;
   height: 100%;
   position: fixed;
-  z-index: 999;
-  top: 0;
-  left: 0;
-  .bg{
-    width: calc(100% - 200px);
-    top: 50%;
-    left: 0;
-    transform: translateY(-50%);
-    position: fixed;
-    user-select: none;
-  }
+  z-index: 100860;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%,-50%);
+  background-color: rgba(0, 0, 0, 0.2);
+  background-size: cover;
+  background-position: center;
   .ui-con{
     position: absolute;
-    top: 48%;
-    left: calc(50% - 200px / 2);
+    top: 50%;
+    left: 50%;
     transform: translate(-50%,-50%);
     text-align: center;
-    >div:not(:last-of-type){
-      text-align: center;
-      margin-top: 40px;
-    }
-    .logo{
-      width: 340px;
-    }
-    .loading{
-      width: 480px;
-    }
     .ld-txt{
-      font-family: 'SY-bold';
       font-size: 18px;
-      margin-top: 16px;
+      >img{
+        width: 100px;
+      }
+      >p{
+        font-size: 12px;
+        color: rgba(255, 255, 255, 0.7);
+      }
     }
   }
 }

+ 0 - 1
web/src/components/popupLayout/index.js

@@ -91,7 +91,6 @@ export function $hideLoading() {
 }
 
 
-
 let broadcastInstance = ''
 export function $showBroadcast(data={}) {
     if (broadcastInstance) {

+ 11 - 0
web/src/mixins/index.js

@@ -2,6 +2,8 @@ import Vue from "vue";
 import {
   $showBroadcast,
   $hideBroadcast,
+  $showLoading,
+  $hideLoading
 } from '@/components/popupLayout'
 
 import {$showHotspot,$hideHotspot } from '@/components/hotspot/index.js'
@@ -53,9 +55,18 @@ Vue.mixin({
     $hideBroadcast,
     $showHotspot,
     $hideHotspot,
+    $showLoading,
+    $hideLoading,
     g_dealUrl(src){
       return window.manage.dealURL(src)
     },
+    handleContent(content,fontsize=16){
+      if (!content) {
+        return ''
+      }
+      var reg = new RegExp(' {4}', 'g');//g就是代表全部
+      return content.replace(reg , `<span style="display:inline-block;width:${fontsize*2}px;"></span>`);
+    },
     formatTime
   }
 })

+ 0 - 244
web/src/newcomponents/hovercom/commentator/data.js

@@ -1,244 +0,0 @@
-let data = [
-  {
-    id: 1,
-    question: "解放军总医院的院训是什么?",
-    answer: [
-      {
-        val: "A",
-        title: "敬业、忠诚、厚德、创新",
-      },
-      {
-        val: "B",
-        title: "忠诚、敬业、创新、厚德",
-      },
-      {
-        val: "C",
-        title: "忠诚、厚德、创新、敬业",
-      },
-      {
-        val: "D",
-        title: "忠诚、敬业、厚德、创新",
-      },
-    ],
-    correct: "D",
-  },
-
-  {
-    id: 2,
-    question: "关于修建解放军总医院提出 “先准备、后建设”的国家领导人是谁?",
-    answer: [
-      {
-        val: "A",
-        title: "周恩来",
-      },
-      {
-        val: "B",
-        title: "毛泽东",
-      },
-      {
-        val: "C",
-        title: "朱德",
-      },
-      {
-        val: "D",
-        title: "聂荣臻",
-      },
-    ],
-    correct: "B",
-  },
-
-  {
-    id: 3,
-    question: "军委直属机关医院改称中国人民解放军第三〇一医院的时间是?",
-    answer: [
-      {
-        val: "A",
-        title: "1954年7月2日",
-      },
-      {
-        val: "B",
-        title: "1955年7月1日",
-      },
-      {
-        val: "C",
-        title: "1953年8月5日",
-      },
-      {
-        val: "D",
-        title: "1954年8月4日",
-      },
-    ],
-    correct: "D",
-  },
-
-  {
-    id: 4,
-    question: "解放军总医院首任院长是谁?",
-    answer: [
-      {
-        val: "A",
-        title: "靳来川",
-      },
-      {
-        val: "B",
-        title: "白崇友",
-      },
-      {
-        val: "C",
-        title: "蒲荣钦",
-      },
-      {
-        val: "D",
-        title: "涂通今",
-      },
-    ],
-    correct: "A",
-  },
-
-  {
-    id: 5,
-    question: "20世纪90年代,解放军总医院哪位专家当选为中国工程院首批院士?",
-    answer: [
-      {
-        val: "A",
-        title: "黄志强",
-      },
-      {
-        val: "B",
-        title: "盛志勇",
-      },
-      {
-        val: "C",
-        title: "姜泗长",
-      },
-      {
-        val: "D",
-        title: "卢世璧",
-      },
-    ],
-    correct: "C",
-  },
-
-  {
-    id: 6,
-    question:
-      "解放军总医院2018年,解放军总医院转隶联勤保障部队的日期是?的院训是什么?",
-    answer: [
-      {
-        val: "A",
-        title: "12月28日",
-      },
-      {
-        val: "B",
-        title: "12月31日",
-      },
-      {
-        val: "C",
-        title: "12月30日",
-      },
-      {
-        val: "D",
-        title: "12月29日",
-      },
-    ],
-    correct: "B",
-  },
-
-  {
-    id: 7,
-    question: "解放军总医院共有几个医学中心、几个医疗区?",
-    answer: [
-      {
-        val: "A",
-        title: "8、5",
-      },
-      {
-        val: "B",
-        title: "9、6",
-      },
-      {
-        val: "C",
-        title: "14 、5",
-      },
-      {
-        val: "D",
-        title: "10、8",
-      },
-    ],
-    correct: "A",
-  },
-
-  {
-    id: 8,
-    question: "解放军总医院共有多少位院士?",
-    answer: [
-      {
-        val: "A",
-        title: "12",
-      },
-      {
-        val: "B",
-        title: "10",
-      },
-      {
-        val: "C",
-        title: "11",
-      },
-      {
-        val: "D",
-        title: "9",
-      },
-    ],
-    correct: "A",
-  },
-
-  {
-    id: 9,
-    question: "解放军总医院共有多少个临床医学部?",
-    answer: [
-      {
-        val: "A",
-        title: "8",
-      },
-      {
-        val: "B",
-        title: "21",
-      },
-      {
-        val: "C",
-        title: "17",
-      },
-      {
-        val: "D",
-        title: "25",
-      },
-    ],
-    correct: "B",
-  },
-
-  {
-    id: 10,
-    question: "解放军总医院获得过几项国家科技进步一等奖?",
-    answer: [
-      {
-        val: "A",
-        title: "9",
-      },
-      {
-        val: "B",
-        title: "14",
-      },
-      {
-        val: "C",
-        title: "12",
-      },
-      {
-        val: "D",
-        title: "15",
-      },
-    ],
-    correct: "C",
-  },
-];
-
-export { data };

+ 44 - 11
web/src/newcomponents/hovercom/dati/index.vue

@@ -38,15 +38,31 @@
 
     <template v-else>
       <div class="dati">
-        <div class="success" v-if="correctRate>50">
-          <img :src="require(`@/assets/images/project/huizhang.png`)" alt="" />
+        <div class="success" >
+          
+        <template  v-if="correctRate==100">
+          <img :src="require(`@/assets/images/project/jin.png`)" alt="" />
           <span>恭喜您完成挑战!</span>
+          <p class="scess">您的得分:{{correctRate}}分</p>
+        </template>
+
+         <template v-else-if="correctRate>=60&&correctRate<=90">
+          <img :src="require(`@/assets/images/project/yin.png`)" alt="" />
+          <span  class="yinspan">恭喜您完成挑战!</span>
+          <p class="yin">您的得分:{{correctRate}}分</p>
+        </template>
+
+        <template v-else>
+          <img :src="require(`@/assets/images/project/tong.png`)" alt="" />
+          <span  class="tongspan">不要灰心,再接再厉!</span>
+          <p class="tong">您的得分:{{correctRate}}分</p>
+        </template>
+
         </div>
-        <div class="fail" v-else>
+        <!-- <div class="fail" v-else>
           <img :src="require(`@/assets/images/project/blue.png`)" alt="" />
           <p>不要灰心,再接再厉!</p>
-        </div>
-        <p :class="{scess:correctRate>50}">您的得分:{{correctRate}}分</p>
+        </div> -->
       </div>
       <div class="dati_btn">
         <span class="active" @click="restart">再来一次</span>
@@ -199,23 +215,42 @@ export default {
     background-color: rgba(255, 255, 255, 0.7);
     .success{
       position: relative;
-      width: 235px;
+      width: 224px;
       margin: -10px auto 0;
       >img{
         width: 100%;
       }
       >span{
         width: 100%;
-        bottom: 20px;
+        bottom: 40px;
         position: absolute;
         left: 50%;
-        transform: translateX(-45%);
+        transform: translateX(-47%);
         font-size: 18px;
         color: #215A4A;
         display: inline-block;
         font-weight: bold;
       }
+
+      .yinspan{
+        color: #626260;
+      }
+
+      .tongspan{
+        color: #FFE0A6;
+      }
+
+      .scess{
+        color: #ccaf8f;
+      }
+      .yin{
+        color: #A2A2A2;
+      }
+      .tong{
+        color: #8F5E49;
+      }
     }
+    
     .fail{
       width: 235px;
       margin: 20px auto;
@@ -230,9 +265,7 @@ export default {
     >p{
       font-size: 14px;
     }
-    .scess{
-      color: #B8A38C;
-    }
+   
   }
 
 

+ 2 - 2
web/src/newcomponents/huizhang/huizhang.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="huizcon">
     <div class="success">
-      <img :src="require(`@/assets/images/project/huizhang.png`)" alt="" />
-      <span>您是第721443位参观者!</span>
+      <img :src="require(`@/assets/images/project/biglogo.png`)" alt="" />
+      <!-- <span>您是第721443位参观者!</span> -->
     </div>
     <p>达成成就:累计游览3分钟</p>
     <p>感谢您对解放军总医院数字史馆的支持!</p>

+ 43 - 4
web/src/newcomponents/xunirenwu/index.vue

@@ -1,12 +1,33 @@
 <template>
   <div class="jugong">
     <div
+    v-show="active == 'female_2'"
       class="jubox " 
       :class="{jugongone:isShow}"
       :style="{
-        backgroundImage: `url(${require(`@/assets/images/project/commentator/xuliezhen/${active}.png`)})`,
+        backgroundImage: `url(${require(`@/assets/images/project/commentator/xuliezhen/female_2.png`)})`,
       }"
     ></div>
+
+    <div
+      v-show="active == 'female_1'"
+      class="jubox " 
+      :class="{jugongone:isShow}"
+      :style="{
+        backgroundImage: `url(${require(`@/assets/images/project/commentator/xuliezhen/female_1.png`)})`,
+      }"
+    ></div>
+
+    <div
+      v-show="active == 'male'"
+      class="jubox " 
+      :class="{jugongone:isShow}"
+      :style="{
+        backgroundImage: `url(${require(`@/assets/images/project/commentator/xuliezhen/male.png`)})`,
+      }"
+    ></div>
+
+    <div @click="action" class="canclk"></div>
   </div>
 </template>
 
@@ -21,13 +42,18 @@ export default {
       isShow: true
     }
   },
-  mounted() {
-    this.$bus.$on('xunirole',data=>{
-      this.active = data.id
+  methods:{
+    action(){
       this.isShow = false
       setTimeout(() => {
         this.isShow = true
       }, 100);
+    }
+  },
+  mounted() {
+    this.$bus.$on('xunirole',data=>{
+      this.active = data.id
+      this.action()
     })
   },
 };
@@ -52,6 +78,19 @@ export default {
   .jugongone {
     animation: jugone 2.4s steps(72) 1;
   }
+
+  .canclk{
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    z-index: 999;
+    width: 34%;
+    height: 86%;
+    transform: translate(-50%,-50%);
+    // background: #000;
+    cursor: pointer;
+    pointer-events:auto;
+  }
 }
 
 @keyframes jugone {

+ 20 - 2
web/src/views/collection/index.vue

@@ -22,6 +22,8 @@
 import Collection from "./Collection";
 import detail from "./detail";
 import {data} from "./data";
+import { getList } from "@/config/api";
+
 
 let type = [
   {
@@ -86,7 +88,7 @@ export default {
     },
   },
   mounted() {
-    // this.getCollection();
+    this.getCollection();
     setTimeout(() => {
       this.isshow = true
     });
@@ -112,7 +114,23 @@ export default {
     },
     handleSearch(data) {
       this.searchKey = data;
-    }
+    },
+    async getCollection(key = null) {
+      getList(
+        "goods",
+        {
+          pageNum: this.paging.pageNum,
+          pageSize: this.paging.pageSize,
+          type: "",
+          searchKey: key||this.searchKey,
+        },
+        (result) => {
+          console.log(result.data.list);
+          // this.data = result.data.list;
+          // this.paging.total = result.data.total;
+        }
+      );
+    },
   },
 };
 </script>

+ 1 - 1
web/src/views/index/data.js

@@ -15,7 +15,7 @@ let data = [
     id:'other',
     name:'其他展厅',
     en:'Other Exhibition',
-    sceneCode:'1149_2'
+    sceneCode:'1152_1'
   }
 ]
 

+ 13 - 3
web/src/views/index/index.vue

@@ -2,7 +2,7 @@
   <div class="index">
     <video ref="bgv" class="bgvideo" loop muted :src="require('@/assets/video/bg.mp4')"></video>
     <div class="index_con" v-if="isshowall">
-      <div class="i_left" :class="isshow?'animate__animated animate__zoomIn':''">
+      <div class="i_left" :class="['animate__animated', isshow?'animate__zoomIn':'',showScene?`animate__zoomOut`:''] ">
         <div class="i_top" >
           <img :src="require('@/assets/images/logo@2x.png')" alt="" />
         </div>
@@ -31,7 +31,7 @@
       </div>
       <ul class="shiguan">
         <li 
-        :class="isshow?`animate__animated animate__zoomIn animate__delay-${(i+1)*1}s`:'hoverli'"
+        :class="['animate__animated',isshow?`animate__zoomIn animate__delay-${(i+1)*1}s`:'hoverli', showScene?`animate__zoomOut`:'']"
          v-for="(item, i) in data" :key="i" @click="handleItem(item)">
           <div class="gezi gezi1"></div>
           <div class="gezi gezi2"></div>
@@ -54,6 +54,8 @@
     </div>
 
     <video @click="bfshipin" ref="startv" v-if="!novideo" :style="{zIndex:lockUpdate?'-11':'999'}" class="startvideo" :class="!isstart?'animate__animated animate__fadeOut':''"  autoplay muted :src="require('@/assets/video/start.mp4')"></video>
+
+    <!-- <scene v-if="!isshow" v-show="delayshowscene" /> -->
   </div>
 </template>
 
@@ -62,10 +64,12 @@ import { data } from "./data";
 import Search from "@/components/search";
 import chat from "@/components/icon/chat";
 import collection from "@/components/icon/collection";
+import scene from "@/views/scene/";
+
 import { formatDate } from "@/config/utils.js";
 
 export default {
-  components: { Search, chat, collection },
+  components: { Search, chat, collection,scene },
   data() {
     let novideo = localStorage.getItem("novideo");
 
@@ -78,6 +82,8 @@ export default {
       isstart:true,
       lockUpdate:false,
       novideo,
+      showScene: false,
+      delayshowscene:false,
       navs: [
         {
           name: "精品典藏",
@@ -102,6 +108,10 @@ export default {
       if (item.id == 'expert') {
         this.$router.push({ name: "expert" });
       }else{
+        // this.showScene = true
+        // setTimeout(() => {
+        //   this.delayshowscene = true
+        // }, 300);
         this.$router.push({ name: "scene", params: { id: item.sceneCode } });
       }
     },

+ 33 - 17
web/src/views/message/Message.vue

@@ -7,23 +7,23 @@
       <div class="con">
 
         <ul>
-          <li v-for="(item, i) in 10" :key="i">
+          <li v-for="(item, i) in message" :key="i">
             <img
               :src="require(`@/assets/images/icon/usericon.png`)"
               alt=""
             />
             <div>
-              <p>匿名</p>
-              <p>很不错。很丰富很全面</p>
+              <p>{{(item.isRealName?item.realName:item.nickName)||'匿名用户'}}</p>
+              <p>{{item.content}}</p>
             </div>
-            <p>2021.12.12</p>
+            <p>{{item.createTime}}</p>
 
           </li>
         </ul>
 
-        <Paging class="paging" v-if="paging.total>0" :paging="paging" />
+        <Paging class="paging" v-if="paging.total>0" @changeCurrent="handleCurrent" :paging="paging" />
         
-        <span class="totalmsg">共45条留言</span>
+        <span class="totalmsg">共{{paging.total}}条留言</span>
       </div>
 
       <div class="vtextarea">
@@ -52,7 +52,7 @@
 </template>
 
 <script>
-import { saveMsg } from "@/config/api";
+import { getMsg,saveMsg } from "@/config/api";
 import emoji from "@/components/emoji";
 import Paging from '@/components/Paging'
 
@@ -72,31 +72,47 @@ export default {
       message: [],
       loadAll: false,
       paging: {
-        pageSize: 12,
+        pageSize: 4,
         pageNum: 1,
-        total: 118,
+        total: 0,
         showSize: 2,
         current: 1,
       },
     };
   },
   watch: {
-    mpageSize() {
-    },
+   'paging.pageNum':{
+     deep:true,
+     handler:function () {
+      this.getMessage()
+     }
+   }
   },
   mounted() {
+    this.getMessage()
   },
   methods: {
+     async getMessage(){
+      getMsg({
+        pageNum: this.paging.pageNum,
+        pageSize: this.paging.pageSize,
+      },result=>{
+        result.data.list.forEach(item=>{
+          item.showComment = false
+          item.comment = ''
+        })
+        
+        this.message = result.data.list
+        this.paging.total= result.data.total
+      })
+    },
     selectEmoji(data){
       this.msg += data
     },
-    tologin() {
-      window.scrollTo(0, 0);
-      this.$bus.$emit("showLogin", true);
-    },
-    loadmore() {
-      this.mpageSize += this.mpageSize;
+    handleCurrent(data){
+      console.log(data);
     },
+
     async leaveMsg(item = "", i = "") {
       let tmp = (item ? item.comment : this.msg).trim();
       if (!tmp) {

+ 46 - 3
web/src/views/scene/gui/menu.vue

@@ -147,7 +147,17 @@
 
             <div rel="music">
               <img title="音频"
-              class="tttttt icon" :src="require('@/assets/images/icon/bigscene/musicon.png')" />
+              @click="music=!music"
+              class="tttttt icon" :src="require(`@/assets/images/icon/bigscene/music${music?'off':'on'}.png`)" />
+            </div>
+
+             <div rel="like">
+              <div title="点赞" class="likekkk tttttt">
+                <img 
+                 :class="{likeactive:isdianzan}"
+                 @click.stop="dianzan"
+                  class=" icon" :src="require('@/assets/images/icon/bigscene/likexuliezhen.png')" />
+              </div>
             </div>
 
 
@@ -172,7 +182,6 @@
               <img
                 class="icon icon-inside"
                 :src="require('@/assets/images/VR.png')"
-                
               />
             </div>
             <!-- <div
@@ -214,7 +223,7 @@
     <div class="pinBottom right hideTarget">
       <div class="rightViewContainer clearfix">
 
-        <!-- <xunirenwu :active="xunirenwu"/> -->
+        <xunirenwu :active="xunirenwu"/>
 
         <div class="commentator">
           <img  title="虚拟人物切换" class="tttttt icon" @click="clickItem({ id: 5, current: xunirenwu, img: 'commentator'})" :src="require('@/assets/images/icon/bigscene/change.png')" />
@@ -287,6 +296,8 @@ export default {
     return {
       isShowList:false,
       isGuide: true,
+      isdianzan:false,
+      music:false,
       danmu:[
         "我是光荣的白衣天使,在春风里绽放笑容",
         "救死扶伤的行列里,我们是排头兵",
@@ -342,6 +353,12 @@ export default {
       });
   },
   methods: {
+    dianzan(){
+      this.isdianzan = false
+      setTimeout(() => {
+        this.isdianzan = true
+      }, 0);
+    },
     clickItem(item){
       this.subActive = item.img
       this.$emit("btnactive", item.img);
@@ -407,6 +424,23 @@ export default {
   }
 }
 
+.likekkk{
+  width: 47px;
+  height: 47px;
+  overflow: hidden;
+  position: relative;
+  >img {
+    position: absolute;
+    left: 0;
+    width: 1692px!important;
+    height: 47px!important;
+    top: 0;
+  }
+  .likeactive {
+    animation: like 1.4s steps(36) backwards;
+  }
+}
+
 .gui-floor{
   width: @wh!important;
   height: @wh!important;
@@ -546,4 +580,13 @@ export default {
   bottom: 4px;
 }
 
+@keyframes like {
+  100% {
+    left: -1692px;
+  }
+
+  0%{
+    left: 0;
+  }
+}
 </style>

+ 6 - 2
web/src/views/scene/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="scene-body">
-    <iframe v-show="canshow" ref="ifr" :src="`scene.html?m=${sceneCode}&qust=1`" allowfullscreen="true" frameborder="0"></iframe>
+    <iframe :class="{showifr:canshow}" ref="ifr" :src="`scene.html?m=${sceneCode}&qust=1`" allowfullscreen="true" frameborder="0"></iframe>
    
     <template v-if="!isShowHP">
        <div class="back">
@@ -27,7 +27,7 @@
 export default {
   data(){
     return {
-      sceneCode:this.$route.params.id,
+      sceneCode:this.$route.params.id || '1149_2',
       isShowHP:false,
       canshow:false,
       delaytime:false,
@@ -82,6 +82,10 @@ export default {
     >iframe{
       width: 100%;
       height: 100%;
+      visibility: hidden;
+    }
+    .showifr{
+      visibility: visible;
     }
 }
 .back{

+ 1 - 1
web/src/views/scene/scene.vue

@@ -150,7 +150,7 @@ export default {
         this.timer && clearTimeout(this.timer)
         this.timer = setTimeout(() => {
           this.showhuizhang = true
-        }, 3* 60 * 1000);
+        }, 3 * 60 * 1000);
 
       }, false);
     });