sunzehao 11 месяцев назад
Родитель
Сommit
05db331bf7

+ 53 - 17
src/assets/windimgs/fanSvg/sl.svg

@@ -1,7 +1,16 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 93.5 96.5" style="enable-background:new 0 0 93.5 96.5;" xml:space="preserve">
+<svg
+  version="1.1"
+  id="图层_1"
+  xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  x="0px"
+  y="0px"
+  viewBox="0 0 93.5 96.5"
+  style="enable-background:new 0 0 93.5 96.5;"
+  xml:space="preserve"
+>
 <style type="text/css">
 	.st0{fill:#D8D8D8;}
 	.st1{fill:#FFFFFF;}
@@ -9,30 +18,57 @@
 	.st3{fill:#B1E1EB;}
 </style>
 <g>
-	<path class="st0" d="M46,39.2l-2.2,50.3c0,0,1.9,0.7,3.6,0.7c1.7,0,3.8-0.7,3.8-0.7l-2.2-50.3C48.9,39.2,46,39.2,46,39.2z"/>
+	<path
+      class="st0"
+      d="M46,39.2l-2.2,50.3c0,0,1.9,0.7,3.6,0.7c1.7,0,3.8-0.7,3.8-0.7l-2.2-50.3C48.9,39.2,46,39.2,46,39.2z"
+    />
 </g>
 <g>
 	<g>
-		<path class="st1" d="M45.4,37.3l3.9,1.5c0,0,10.1-21.3,10.8-32.8C52.6,15.2,45.4,37.3,45.4,37.3"/>
-		<path class="st1" d="M49.1,38.8l-3.2,2.6c0,0,13.6,19.2,23.4,25.5C65,55.9,49.1,38.8,49.1,38.8"/>
-		<path class="st1" d="M45.7,41.6l0-4.1c0,0-23.5-2-34.5,1.4C22.5,42.7,45.7,41.6,45.7,41.6"/>
+		<path
+        class="st1"
+        d="M45.4,37.3l3.9,1.5c0,0,10.1-21.3,10.8-32.8C52.6,15.2,45.4,37.3,45.4,37.3"
+      />
+		<path
+        class="st1"
+        d="M49.1,38.8l-3.2,2.6c0,0,13.6,19.2,23.4,25.5C65,55.9,49.1,38.8,49.1,38.8"
+      />
+		<path
+        class="st1"
+        d="M45.7,41.6l0-4.1c0,0-23.5-2-34.5,1.4C22.5,42.7,45.7,41.6,45.7,41.6"
+      />
 	</g>
 	<g>
-		<path class="st0" d="M49.1,38.3l11-32.8c0,0-0.1,2-0.2,2.7c-0.1,0.6-0.3,1.7-0.4,2.2c-0.1,0.5-0.4,1.8-0.4,1.8s-0.6,2.4-0.8,3.1
-			c-0.8,2.6-2.5,7.6-3.4,10.1c-0.8,2.1-2.5,6.3-3.4,8.4c-0.5,1.1-2,4.5-2,4.5"/>
-		<path class="st0" d="M46.4,41.5l23.2,25.6c0,0-1.7-1.1-2.2-1.5c-0.5-0.3-1.3-1.1-1.7-1.4c-0.3-0.3-1.4-1.2-1.4-1.2
-			s-1.8-1.7-2.3-2.2c-1.9-1.9-5.5-5.9-7.2-7.9c-1.5-1.7-4.3-5.3-5.7-7.1c-0.7-1-2.9-4-2.9-4"/>
-		<path class="st0" d="M45.4,37.8L10.8,39c0,0,1.9-0.6,2.6-0.8c0.5-0.1,1.7-0.3,2.2-0.4c0.5-0.1,1.8-0.2,1.8-0.2s2.4-0.3,3.2-0.3
-			c2.7-0.2,8-0.4,10.7-0.3c2.3,0,6.8,0.1,9.1,0.3c1.2,0.1,4.9,0.3,4.9,0.3"/>
+		<path
+        class="st0"
+        d="M49.1,38.3l11-32.8c0,0-0.1,2-0.2,2.7c-0.1,0.6-0.3,1.7-0.4,2.2c-0.1,0.5-0.4,1.8-0.4,1.8s-0.6,2.4-0.8,3.1
+			c-0.8,2.6-2.5,7.6-3.4,10.1c-0.8,2.1-2.5,6.3-3.4,8.4c-0.5,1.1-2,4.5-2,4.5"
+      />
+		<path
+        class="st0"
+        d="M46.4,41.5l23.2,25.6c0,0-1.7-1.1-2.2-1.5c-0.5-0.3-1.3-1.1-1.7-1.4c-0.3-0.3-1.4-1.2-1.4-1.2
+			s-1.8-1.7-2.3-2.2c-1.9-1.9-5.5-5.9-7.2-7.9c-1.5-1.7-4.3-5.3-5.7-7.1c-0.7-1-2.9-4-2.9-4"
+      />
+		<path
+        class="st0"
+        d="M45.4,37.8L10.8,39c0,0,1.9-0.6,2.6-0.8c0.5-0.1,1.7-0.3,2.2-0.4c0.5-0.1,1.8-0.2,1.8-0.2s2.4-0.3,3.2-0.3
+			c2.7-0.2,8-0.4,10.7-0.3c2.3,0,6.8,0.1,9.1,0.3c1.2,0.1,4.9,0.3,4.9,0.3"
+      />
 	</g>
 	
-		<animateTransform  accumulate="none" additive="replace" attributeName="transform" attributeType="XML" calcMode="linear" dur="4s" fill="remove" from="0 46.75 39.182" repeatCount="indefinite" restart="always" to="359 46.75 39.182" type="rotate">
-		</animateTransform>
+		<!-- <animateTransform  accumulate="none" additive="replace" attributeName="transform" attributeType="XML" calcMode="linear" dur="4s" fill="remove" from="0 46.75 39.182" repeatCount="indefinite" restart="always" to="359 46.75 39.182" type="rotate">
+		</animateTransform> -->
 </g>
 <g>
-	<path class="st2" d="M42.7,39.2c0,2.5,2.1,4.5,4.7,4.5s4.7-2,4.7-4.5c0-2.5-2.1-4.5-4.7-4.5S42.7,36.7,42.7,39.2"/>
+	<path
+      class="st2"
+      d="M42.7,39.2c0,2.5,2.1,4.5,4.7,4.5s4.7-2,4.7-4.5c0-2.5-2.1-4.5-4.7-4.5S42.7,36.7,42.7,39.2"
+    />
 </g>
 <g>
-	<path class="st3" d="M44.4,39.2c0,1.6,1.4,2.8,3,2.8c1.7,0,3-1.3,3-2.8c0-1.6-1.4-2.8-3-2.8S44.4,37.6,44.4,39.2"/>
+	<path
+      class="st3"
+      d="M44.4,39.2c0,1.6,1.4,2.8,3,2.8c1.7,0,3-1.3,3-2.8c0-1.6-1.4-2.8-3-2.8S44.4,37.6,44.4,39.2"
+    />
 </g>
 </svg>

+ 67 - 25
src/assets/windimgs/fanSvg/xd.svg

@@ -1,8 +1,26 @@
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 93.5 96.5"
-    enable-background="new 0 0 93.5 96.5" xml:space="preserve">
+<svg
+  version="1.1"
+  xmlns="http://www.w3.org/2000/svg"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  viewBox="0 0 93.5 96.5"
+  enable-background="new 0 0 93.5 96.5"
+  xml:space="preserve"
+>
     <defs>
-        <rect id="SVGID_1_" x="-260.14" y="-365.945" width="595.28" height="841.89" />
-        <rect id="SVGID_3_" x="-260.14" y="-365.945" width="595.28" height="841.89" />
+        <rect
+      id="SVGID_1_"
+      x="-260.14"
+      y="-365.945"
+      width="595.28"
+      height="841.89"
+    />
+        <rect
+      id="SVGID_3_"
+      x="-260.14"
+      y="-365.945"
+      width="595.28"
+      height="841.89"
+    />
     </defs>
     <clipPath id="SVGID_2_">
         <use xlink:href="#SVGID_1_" overflow="visible" />
@@ -12,48 +30,72 @@
     </clipPath>
     <!-- 柱 -->
     <g>
-        <path fill="#D8D8D8" d="M45.96,39.183l-2.22,50.288c0,0,1.916,0.747,3.605,0.747c1.738,0,3.752-0.747,3.752-0.747l-2.181-50.288
-        H45.96z" />
+        <path
+      fill="#D8D8D8"
+      d="M45.96,39.183l-2.22,50.288c0,0,1.916,0.747,3.605,0.747c1.738,0,3.752-0.747,3.752-0.747l-2.181-50.288
+        H45.96z"
+    />
     </g>
     <!-- 风扇 -->
     <g>
         <!-- 风扇灰色部分 -->
         <g>
-            <path fill="#c531c7"
-                d="M45.427,37.35l3.854,1.471c0,0,10.131-21.287,10.834-32.815C52.61,15.16,45.427,37.35,45.427,37.35" />
-            <path fill="#c531c7"
-                d="M49.088,38.821l-3.163,2.647c0,0,13.648,19.221,23.373,25.454C64.962,55.908,49.088,38.821,49.088,38.821" />
-            <path fill="#c531c7"
-                d="M45.749,41.592l0.022-4.125c0,0-23.489-2-34.528,1.396C22.452,42.669,45.749,41.592,45.749,41.592" />
+            <path
+        fill="#c531c7"
+        d="M45.427,37.35l3.854,1.471c0,0,10.131-21.287,10.834-32.815C52.61,15.16,45.427,37.35,45.427,37.35"
+      />
+            <path
+        fill="#c531c7"
+        d="M49.088,38.821l-3.163,2.647c0,0,13.648,19.221,23.373,25.454C64.962,55.908,49.088,38.821,49.088,38.821"
+      />
+            <path
+        fill="#c531c7"
+        d="M45.749,41.592l0.022-4.125c0,0-23.489-2-34.528,1.396C22.452,42.669,45.749,41.592,45.749,41.592"
+      />
         </g>
         <!-- 风扇白色部分 -->
         <g>
-            <path fill="#D8D8D8" d="M49.095,38.328l11.02-32.752c0,0-0.102,2.009-0.186,2.674c-0.068,0.56-0.282,1.67-0.402,2.222
+            <path
+        fill="#D8D8D8"
+        d="M49.095,38.328l11.02-32.752c0,0-0.102,2.009-0.186,2.674c-0.068,0.56-0.282,1.67-0.402,2.222
         c-0.1,0.454-0.421,1.81-0.421,1.81s-0.583,2.35-0.815,3.123c-0.767,2.562-2.484,7.63-3.438,10.129
-        c-0.805,2.119-2.529,6.314-3.434,8.393c-0.492,1.132-2.029,4.5-2.029,4.5" />
-            <path fill="#D8D8D8" d="M46.446,41.545l23.227,25.585c0,0-1.705-1.066-2.244-1.465c-0.457-0.334-1.32-1.061-1.744-1.436
+        c-0.805,2.119-2.529,6.314-3.434,8.393c-0.492,1.132-2.029,4.5-2.029,4.5"
+      />
+            <path
+        fill="#D8D8D8"
+        d="M46.446,41.545l23.227,25.585c0,0-1.705-1.066-2.244-1.465c-0.457-0.334-1.32-1.061-1.744-1.436
         c-0.348-0.307-1.375-1.248-1.375-1.248s-1.769-1.656-2.33-2.234c-1.863-1.918-5.451-5.889-7.17-7.938
-        c-1.456-1.737-4.28-5.287-5.654-7.091c-0.748-0.98-2.939-3.965-2.939-3.965" />
-            <path fill="#D8D8D8" d="M45.376,37.815l-34.535,1.201c0,0,1.915-0.614,2.569-0.768c0.548-0.131,1.662-0.324,2.22-0.406
+        c-1.456-1.737-4.28-5.287-5.654-7.091c-0.748-0.98-2.939-3.965-2.939-3.965"
+      />
+            <path
+        fill="#D8D8D8"
+        d="M45.376,37.815l-34.535,1.201c0,0,1.915-0.614,2.569-0.768c0.548-0.131,1.662-0.324,2.22-0.406
         c0.459-0.066,1.843-0.241,1.843-0.241s2.405-0.28,3.211-0.335c2.667-0.181,8.015-0.356,10.691-0.345
-        c2.267,0.01,6.798,0.149,9.064,0.265c1.231,0.064,4.926,0.318,4.926,0.318" />
+        c2.267,0.01,6.798,0.149,9.064,0.265c1.231,0.064,4.926,0.318,4.926,0.318"
+      />
         </g>
-        <animateTransform attributeName="transform"
+        <!-- <animateTransform attributeName="transform"
             attributeType="XML"
             type="rotate"
             from="0 46.75 39.182"
             to="359 46.75 39.182"
             dur="8s"
-            repeatCount="indefinite"/>
+            repeatCount="indefinite"/> -->
     </g>
     <!-- 中心圆大 -->
     <g>
-        <path fill="#60BFD6" d="M42.686,39.182c0,2.504,2.117,4.545,4.732,4.545s4.733-2.041,4.733-4.545c0-2.512-2.118-4.544-4.733-4.544
-        S42.686,36.67,42.686,39.182" />
+        <path
+      fill="#60BFD6"
+      d="M42.686,39.182c0,2.504,2.117,4.545,4.732,4.545s4.733-2.041,4.733-4.545c0-2.512-2.118-4.544-4.733-4.544
+        S42.686,36.67,42.686,39.182"
+    />
     </g>
     <!-- 中心圆小 -->
     <g>
-        <path fill="#B1E1EB" d="M44.4,39.182c0,1.561,1.353,2.831,3.017,2.831c1.663,0,3.02-1.27,3.02-2.831c0-1.56-1.356-2.829-3.02-2.829
-        C45.753,36.353,44.4,37.622,44.4,39.182" />
+        <path
+      fill="#B1E1EB"
+      d="M44.4,39.182c0,1.561,1.353,2.831,3.017,2.831c1.663,0,3.02-1.27,3.02-2.831c0-1.56-1.356-2.829-3.02-2.829
+        C45.753,36.353,44.4,37.622,44.4,39.182"
+    />
     </g>
-</svg>
+</svg>

BIN
src/assets/windimgs/fanSvg/yp_black.png


BIN
src/assets/windimgs/fanSvg/yp_blue.png


BIN
src/assets/windimgs/fanSvg/yp_green.png


BIN
src/assets/windimgs/fanSvg/yp_orange.png


BIN
src/assets/windimgs/fanSvg/yp_purple.png


BIN
src/assets/windimgs/fanSvg/yp_red.png


BIN
src/assets/windimgs/fanSvg/yp_white.png


+ 42 - 10
src/views/cesium.vue

@@ -81,11 +81,9 @@
           </div>
           <div class="spjk" v-if="showVideoMsg">
               <!-- src="https://www.bilibili.com/video/BV1421DYCELw?t=12.1" -->
-            <iframe
-              src="/public/static/windVideo.mp4"
-              frameborder="0"
-              style="width: 100%; height: 100%"
-            ></iframe>
+            <video ref="videoPlayer" controls width="95%">
+                <source src="/public/static/windVideo.mp4" type="video/mp4" />
+            </video>
           </div>
           <div class="gzck" v-if="showProblemMsg">
             <windPro />
@@ -96,6 +94,7 @@
     <cesiumweatherView
       :viewer="viewer"
       :sidebarRightData="sidebarRightData"
+      :stationValue="stationValue"
       @coverOnChange="coverOnChange"
       @changeType="changeType"
       v-if="showTypeViewer"
@@ -255,7 +254,7 @@ export default {
       allStationentitys: [],
       allWindEntitys: [],
       showTypeViewer: true,
-      stationValue: []
+        stationValue: ['Wind', 'Fire', 'Solar', 'Storage'],
     };
   },
   created() {
@@ -437,7 +436,7 @@ export default {
       this.viewer = viewer;
 
       // this.setMapImageryProvider();
-      this.switchWindLayer();
+    //   this.switchWindLayer();
       this.showAllStation(viewer, allStationJson.station);
       this.initGeoJsonData();
     },
@@ -1031,7 +1030,7 @@ export default {
     // 添加风场图
     async showWindLayer() {
       if (!this.windLayer) {
-        this.resetViewport(6000000);
+        // this.resetViewport(6000000);
         // 色值面板
         const CONTROL_COLOR = {
           uv: [
@@ -1071,6 +1070,39 @@ export default {
           this.trJsonData(windGridData),
           CONTROL_COLOR
         );
+        // this.windLayer = new WindLayer(windGridData, { 
+        //   particleSize: 2.0,
+        //   particleOpacity: 0.6,
+        //   particleSpeed: 0.01,
+        //   maxVelocity: 25,// 风速最大值(用于颜色映射和速度缩放)
+        //   minVelocity: 0, // 风速最小值阈值(低于此值不显示粒子)
+        //   colorScale: [
+        //     "rgb(36,104, 180)",
+        //     "rgb(60,157, 194)",
+        //     "rgb(128,205,193)",
+        //     "rgb(151,218,168)",
+        //     "rgb(198,231,181)",
+        //     "rgb(238,247,217)",
+        //     "rgb(255,238,159)",
+        //     "rgb(252,217,125)",
+        //     "rgb(255,182,100)",
+        //     "rgb(252,150,75)",
+        //     "rgb(250,112,52)",
+        //     "rgb(245,64,32)",
+        //     "rgb(237,45,28)",
+        //     "rgb(220,24,32)",
+        //     "rgb(180,0,35)",
+        //   ],// 颜色强度缩放
+        //   frameRate: 15,
+        //   fadeOpacity: 0.995,
+        //   particleAge: 150,
+        //   maxAge: 60,
+        //   globalAlpha: 0.8,
+        //   velocityScale: 1 / 30,// 粒子移动速度缩放因子(控制动画快慢)
+        //   paths: 250,
+        //   lineWidth: 2,
+        // });
+        // this.windLayer.addTo(this.viewer);
       }
     },
 
@@ -1185,7 +1217,7 @@ export default {
 
         // 显示下一张图片
         imageLayers[currentImageIndex].show = true;
-        imageLayers[currentImageIndex + 1].show = true;
+        // imageLayers[currentImageIndex + 1].show = true;
         console.log("当前显示图片: " + imageUrls[currentImageIndex]);
       }
 
@@ -1554,7 +1586,7 @@ export default {
           this.showStationFn(viewer, e, index, gf);
         }
       });
-    //   this.resetViewport(6000000);
+      this.resetViewport(6000000);
     },
     // 根据状态展示不同颜色风机贴图
     async showStationFn(viewer, e, index, images) {

+ 28 - 14
src/views/cesiumComponents/fjLonLat.json

@@ -1424,98 +1424,112 @@
             "longitude": 114.48421,
             "latitude": 35.34992,
             "name": "F03号风机",
-            "aname": "F03"
+            "aname": "F03",
+            "status": 7
         },
         {
             "nemCode": "F04",
             "longitude": 114.56900,
             "latitude": 35.31883,
             "name": "F04号风机",
-            "aname": "F04"
+            "aname": "F04",
+            "status": 3
         },
         {
             "nemCode": "F05",
             "longitude": 114.47299,
             "latitude": 35.33221,
             "name": "F05号风机",
-            "aname": "F05"
+            "aname": "F05",
+            "status": 7
         },
         {
             "nemCode": "F06",
             "longitude": 114.47547,
             "latitude": 35.32451,
             "name": "F06号风机",
-            "aname": "F06"
+            "aname": "F06",
+            "status": 3
         },
         {
             "nemCode": "F07",
             "longitude": 114.48236,
             "latitude": 35.32497,
             "name": "F07号风机",
-            "aname": "F07"
+            "aname": "F07",
+            "status": 4
         },
         {
             "nemCode": "F08",
             "longitude": 114.48789,
             "latitude": 35.32916,
             "name": "F08号风机",
-            "aname": "F08"
+            "aname": "F08",
+            "status": 5
         },
         {
             "nemCode": "F09",
             "longitude": 114.44517,
             "latitude": 35.32300,
             "name": "F09号风机",
-            "aname": "F09"
+            "aname": "F09",
+            "status": 4
         },
         {
             "nemCode": "F10",
             "longitude": 114.44781,
             "latitude": 35.32297,
             "name": "F10号风机",
-            "aname": "F10"
+            "aname": "F10",
+            "status": 5
         },
         {
             "nemCode": "F11",
             "longitude": 114.44781,
             "latitude": 35.30587,
             "name": "F11号风机",
-            "aname": "F11"
+            "aname": "F11",
+            "status": 7
         },
         {
             "nemCode": "F12",
             "longitude": 114.47172,
             "latitude": 35.29389,
             "name": "F12号风机",
-            "aname": "F12"
+            "aname": "F12",
+            "status": 6
         },
         {
             "nemCode": "F13",
             "longitude": 114.59705,
             "latitude": 35.28476,
             "name": "F13号风机",
-            "aname": "F13"
+            "aname": "F13",
+            "status": 5
         },
         {
             "nemCode": "F14",
             "longitude": 114.59237,
             "latitude": 35.28616,
             "name": "F14号风机",
-            "aname": "F14"
+            "aname": "F14",
+            "status": 6
         },
         {
             "nemCode": "F15",
             "longitude": 114.55623,
             "latitude": 35.28261,
             "name": "F15号风机",
-            "aname": "F15"
+            "aname": "F15",
+            "status": 7
         },
         {
             "nemCode": "F16",
             "longitude": 114.58545,
             "latitude": 35.30268,
             "name": "F16号风机",
-            "aname": "F16"
+            "aname": "F16",
+            "status": 7
         }
     ]
 }

+ 226 - 18
src/views/cesiumComponents/topographicMap.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="mapBox">
     <div id="cesiumContainer" style="width: 100%; height: 100vh"></div>
-    <div :class="!menuComTStyB ? 'menuComTSty' : 'menuComT'">
+    <div :class="!menuComTStyB ? 'menuComTSty' : 'menuComT'" v-if="0">
       <menuCom
         :showbasemap="false"
         :showwindspeed="false"
@@ -37,11 +37,14 @@
             <windHome :modelValItem="modelVal" />
           </div>
           <div class="spjk" v-if="showVideoMsg">
-            <iframe
-              src="https://www.bilibili.com/video/BV1421DYCELw?t=12.1"
+            <!-- <iframe
+              src="/public/static/windVideo.mp4"
               frameborder="0"
               style="width: 100%; height: 100%"
-            ></iframe>
+            ></iframe> -->
+            <video ref="videoPlayer" controls width="95%">
+                <source src="/public/static/windVideo.mp4" type="video/mp4" />
+            </video>
           </div>
           <div class="gzck" v-if="showProblemMsg">
             <windPro />
@@ -81,8 +84,19 @@ import fc from "@/assets/windimgs/fanSvg/fc.png"
 import hd from "@/assets/windimgs/fanSvg/hd.png"
 //光伏电站展示图标
 import gf from "@/assets/windimgs/fanSvg/gf.png"
+
+//故障
+import gz from "@/assets/windimgs/fanSvg/gz.svg"
 //待机
 import dj from "@/assets/windimgs/fanSvg/dj.svg"
+//检修
+import jx from "@/assets/windimgs/fanSvg/jx.svg"
+//限电
+import xd from "@/assets/windimgs/fanSvg/xd.svg"
+//离线
+import lx from "@/assets/windimgs/fanSvg/lx.svg"
+//受累
+import sl from "@/assets/windimgs/fanSvg/sl.svg"
 //动图使用柱子和扇叶
 import bwzhu from "@/assets/windimgs/fanSvg/bwzhu.svg"
 import bwshan from "@/assets/windimgs/fanSvg/bwshan.png"
@@ -113,7 +127,7 @@ export default {
       showVideoMsg: false,
       showProblemMsg: false,
       showModelMsg: false,
-      showWindDetail: false,
+      showWindDetail: true,
       allStationentitys: [],
       allWindEntitys: []
     };
@@ -153,9 +167,89 @@ export default {
         viewer._cesiumWidget._creditContainer.style.display = "none";
         //   this.csceneElliposid(viewer)
         this.viewer = viewer;
-        this.showAllStation(viewer)
+        // 展示场站
+        // this.showAllStation(viewer)
+        // 展示风机
+        this.showWindFromStation(viewer)
         this.initGeoJsonData()
     },
+    //限制相机在区域内活动
+    allowedRectangleFn(viewer) {
+        // 定义允许的区域范围(WGS84 坐标,单位:度)
+        const allowedRectangle = Cesium.Rectangle.fromDegrees(
+            113.9,   // west
+            34.8,    // south
+            115,    // east
+            35.7     // north
+        );
+        // viewer.scene.preUpdate.addEventListener(function(scene, time) {
+        // const camera = viewer.camera;
+        // const position = camera.positionCartographic;
+
+        // if (position) {
+        //     const lon = Cesium.Math.toDegrees(position.longitude);
+        //     const lat = Cesium.Math.toDegrees(position.latitude);
+
+        //     // 判断是否越界
+        //     if (lon < allowedRectangle.west || lon > allowedRectangle.east ||
+        //         lat < allowedRectangle.south || lat > allowedRectangle.north) {
+            
+        //     // 获取当前视角方向,用于保持高度和朝向
+        //     const height = position.height;
+        //     let targetLon = Cesium.Math.clamp(lon, allowedRectangle.west, allowedRectangle.east);
+        //     let targetLat = Cesium.Math.clamp(lat, allowedRectangle.south, allowedRectangle.north);
+
+        //     // camera.flyTo({
+        //     //     destination: Cesium.Cartesian3.fromDegrees(targetLon, targetLat, height),
+        //     //     duration: 0.1, // 可以设置轻微动画,更自然
+        //     //     maximumHeight: height,
+        //     //     complete: function() {
+        //     //     // 防止连续触发
+        //     //     }
+        //     // });
+        //     }
+        // }
+        // });
+        viewer.camera.changed.addEventListener(function() {
+            const cameraPositionCartographic = viewer.camera.positionCartographic;
+            
+            // 检查相机是否在允许的区域内
+            if (cameraPositionCartographic) {
+                const lon = Cesium.Math.toDegrees(cameraPositionCartographic.longitude);
+                const lat = Cesium.Math.toDegrees(cameraPositionCartographic.latitude);
+
+                let corrected = false;
+                let correctedLon = lon;
+                let correctedLat = lat;
+
+                // 限制经度
+                if (lon < allowedRectangle.west) {
+                correctedLon = allowedRectangle.west;
+                corrected = true;
+                } else if (lon > allowedRectangle.east) {
+                correctedLon = allowedRectangle.east;
+                corrected = true;
+                }
+
+                // 限制纬度
+                if (lat < allowedRectangle.south) {
+                correctedLat = allowedRectangle.south;
+                corrected = true;
+                } else if (lat > allowedRectangle.north) {
+                correctedLat = allowedRectangle.north;
+                corrected = true;
+                }
+
+                // 如果超出范围,将相机位置纠正
+                if (corrected) {
+                viewer.camera.flyTo({
+                    destination: Cesium.Cartesian3.fromDegrees(correctedLon, correctedLat, cameraPositionCartographic.height),
+                    duration: 0 // 立即跳转,无动画
+                });
+                }
+            }
+        })
+    },
     // 初始化 geoJson 数据
     async initGeoJsonData() {
       // 创建GeoJSON数据源
@@ -291,9 +385,20 @@ export default {
             if (e.status) {
                 if (e.status === 1) {
                     this.showStatuswind(viewer, e, dj)
+                } else if (e.status === 2) {
+                    this.showStatuswind(viewer, e, gz)
+                } else if (e.status === 3) {
+                    this.showStatuswind(viewer, e, jx)
+                } else if (e.status === 4) {
+                    this.showStatuswind(viewer, e, xd)
+                } else if (e.status === 5) {
+                    this.showStatuswind(viewer, e, lx)
+                } else if (e.status === 6) {
+                    this.showStatuswind(viewer, e, sl)
+                } else {
+                    //并网风机
+                    this.showAnimatewind(viewer, e)
                 }
-            } else {
-                this.showAnimatewind(viewer, e)
             }
         });
         this.resetWindViewport()
@@ -445,6 +550,7 @@ export default {
                 font: '14px sans-serif',
                 fillColor: Cesium.Color.fromBytes(255, 255, 255),
                 heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
+                pixelOffset: val.name === 'F10号风机' ? new Cesium.Cartesian2(40, -20) : new Cesium.Cartesian2(0, 0)
             }
         });
         // 创建事件处理器
@@ -483,7 +589,7 @@ export default {
             rotation: new Cesium.CallbackProperty(function(time) {
             // 每 3 秒转一圈(可调速度)
             const seconds = time.secondsOfDay;
-            const angle = Cesium.Math.toRadians((seconds % 3) * 360 / 3); // 每3秒一圈
+            const angle = Cesium.Math.toRadians((seconds % 3) * -360 / 3); // 每3秒一圈
             return angle;
             }, false),
             // 确保绕中心旋转
@@ -763,15 +869,117 @@ export default {
     },
     // 重置风场中所有风机视角
     resetWindViewport() {
-      this.viewer.camera.flyTo({
-        destination: Cesium.Cartesian3.fromDegrees(114.502778,35.326667, 20000),
-        orientation: {
-          heading: Cesium.Math.toRadians(0),
-          pitch: Cesium.Math.toRadians(-90),
-          roll: 0.0,
-        },
-        duration: 3.0,
-      });
+        // 目标位置:经度、纬度、高度
+        const targetLon = 114.502778;
+        const targetLat = 35.326667;
+        const targetHeight = 20000;
+
+        const draggableHeightTolerance = 10000; // 允许拖拽的高度范围:18,000 ~ 22,000
+        const minHeight = 10000;   // 最低高度
+        const maxHeight = 100000;  // 最高高度
+
+        const allowedOffsetDegrees = 0.2; // 允许拖拽的最大偏移(经纬度)
+
+        const minLon = targetLon - allowedOffsetDegrees;
+        const maxLon = targetLon + allowedOffsetDegrees;
+        const minLat = targetLat - allowedOffsetDegrees;
+        const maxLat = targetLat + allowedOffsetDegrees;
+
+        let that = this
+        that.viewer.camera.flyTo({
+            destination: Cesium.Cartesian3.fromDegrees(targetLon,targetLat, targetHeight),
+            orientation: {
+            heading: Cesium.Math.toRadians(0),
+            pitch: Cesium.Math.toRadians(-90),
+            roll: 0.0,
+            },
+            duration: 3.0,
+            complete: function () {
+                console.log('飞入完成,启用拖拽限制逻辑');
+                enableHeightBasedDragControl();
+            }
+        });
+        // ===== 控制逻辑:根据高度决定是否允许拖拽 =====
+        function enableHeightBasedDragControl() {
+            that.viewer.scene.preUpdate.addEventListener(function (scene, time) {
+                const camera = that.viewer.camera;
+                const posCartographic = camera.positionCartographic;
+
+                if (!posCartographic) return;
+
+                const currentHeight = posCartographic.height;
+                const currentLon = Cesium.Math.toDegrees(posCartographic.longitude);
+                const currentLat = Cesium.Math.toDegrees(posCartographic.latitude);
+
+                // === 第一步:限制相机高度不能超出 [10000, 100000] ===
+                if (currentHeight < minHeight) {
+                // 强制拉高到 minHeight,但保持当前水平视角
+                const newPos = Cesium.Cartesian3.fromDegrees(currentLon, currentLat, minHeight);
+                camera.setView({
+                    destination: newPos,
+                    orientation: {
+                    heading: camera.heading,
+                    pitch: camera.pitch,
+                    roll: camera.roll
+                    }
+                });
+                return; // 避免后续逻辑冲突
+                }
+
+                if (currentHeight > maxHeight) {
+                const newPos = Cesium.Cartesian3.fromDegrees(currentLon, currentLat, maxHeight);
+                camera.setView({
+                    destination: newPos,
+                    orientation: {
+                    heading: camera.heading,
+                    pitch: camera.pitch,
+                    roll: camera.roll
+                    }
+                });
+                return;
+                }
+
+                // === 第二步:判断是否在“可拖拽高度区间” ===
+                const isInDraggableRange =
+                currentHeight >= (targetHeight - draggableHeightTolerance) &&
+                currentHeight <= (targetHeight + draggableHeightTolerance);
+
+                if (isInDraggableRange) {
+                // ✅ 允许拖拽,但限制在指定范围内
+                const correctedLon = Cesium.Math.clamp(currentLon, minLon, maxLon);
+                const correctedLat = Cesium.Math.clamp(currentLat, minLat, maxLat);
+
+                if (Math.abs(correctedLon - currentLon) > 1e-8 || 
+                    Math.abs(correctedLat - currentLat) > 1e-8) {
+                    // 越界了,纠正位置,保留当前高度和视角
+                    camera.setView({
+                    destination: Cesium.Cartesian3.fromDegrees(correctedLon, correctedLat, currentHeight),
+                    orientation: {
+                        heading: camera.heading,
+                        pitch: camera.pitch,
+                        roll: camera.roll
+                    }
+                    });
+                }
+                } else {
+                // ❌ 不在可拖拽高度:禁止平移,强制回正到目标点
+                const correctedPosition = Cesium.Cartesian3.fromDegrees(
+                    targetLon,
+                    targetLat,
+                    currentHeight // 保留当前缩放高度
+                );
+
+                camera.setView({
+                    destination: correctedPosition,
+                    orientation: {
+                    heading: camera.heading,
+                    pitch: camera.pitch,
+                    roll: camera.roll
+                    }
+                });
+                }
+            });
+        }
     },
     switchLayer() {
       this.$router.push({

+ 111 - 34
src/views/cesiumComponents/windView.vue

@@ -1,25 +1,59 @@
 <template>
     <div class="windView">
-        <aside class="sidebar-left-top">
+        <!-- <aside class="sidebar-left-top">
             <div class="stat-block-lefttop" @click="backStations">
                 <p class="label">返回</p>
             </div>
-        </aside>
+        </aside> -->
         <!-- Left Sidebar -->
         <aside class="sidebar-left panel">
             <div class="stat-block">
                 <p class="label">总装机容量:</p>
-                <p class="value">2541<span style="font-size: 18px; font-weight: 400; color: #fff; margin-left: 4px;">MW</span></p>
+                <p class="value">2541<span style="font-size: 18px; font-weight: 400; color: #6c757d; margin-left: 4px;">MW</span></p>
                 <!-- <div class="progress-bar"><div class="progress-bar-inner" style="width: 100%;"></div></div> -->
             </div>
             <div class="stat-block" style="display: flex;justify-content: space-between;">
-                <p><span class="labels">风电 </span><span class="values">1245<span style="font-size: 14px; font-weight: 400; color: #fff; margin-left: 4px;">MW</span></span></p>
-                <p><span class="labels">光伏 </span><span class="values">1296<span style="font-size: 14px; font-weight: 400; color: #fff; margin-left: 4px;">MW</span></span></p>
+                <p><span class="labels">风电 </span><span class="values">1245<span style="font-size: 14px; font-weight: 400; color: #6c757d; margin-left: 4px;">MW</span></span></p>
+                <p><span class="labels">光伏 </span><span class="values">1296<span style="font-size: 14px; font-weight: 400; color: #6c757d; margin-left: 4px;">MW</span></span></p>
             </div>
             <div class="stat-block" style="margin-bottom: 0;">
                 <p class="label">安全天数:</p>
                 <p class="value">1258天</p>
             </div>
+            
+        </aside>
+        <aside class="sidebar-left2 panel" v-if="showWindStatus">
+            <span class="labels" style="">风机状态类型 </span>
+            <div class="stat-block" style="display: flex">
+                <div class="windStatus">
+                    <img :src="bw" style="width:60px;height:60px;">
+                    <p class="values windVal">并网</p>
+                </div>
+                <div class="windStatus">
+                    <img :src="dj" style="width:60px;height:60px;">
+                    <p class="values windVal">待机</p>
+                </div>
+                <div class="windStatus">
+                    <img :src="gz" style="width:60px;height:60px;">
+                    <p class="values windVal">故障</p>
+                </div>
+                <div class="windStatus">
+                    <img :src="jx" style="width:60px;height:60px;">
+                    <p class="values windVal">检修</p>
+                </div>
+                <div class="windStatus">
+                    <img :src="xd" style="width:60px;height:60px;">
+                    <p class="values windVal">限电</p>
+                </div>
+                <div class="windStatus">
+                    <img :src="lx" style="width:60px;height:60px;">
+                    <p class="values windVal">离线</p>
+                </div>
+                <div class="windStatus">
+                    <img :src="sl" style="width:60px;height:60px;">
+                    <p class="values windVal">受累</p>
+                </div>
+            </div>
         </aside>
         <!-- Right Sidebar -->
         <aside class="sidebar-right panel">
@@ -433,7 +467,7 @@
                                     : 'background-color:#05BB4C'
                                 "
                             ></span>
-                            <span>{{ item[0].total }}</span>
+                            <span  style="color:#606769">{{ item[0].total }}</span>
                             </div>
                             <list-bar-chart-2-home
                             :list="item"
@@ -540,7 +574,7 @@
                                         : 'background-color:#05BB4C'
                                     "
                                 ></span>
-                                <span style="color:#fff">{{ item[0].total }}</span>
+                                <span style="color:#606769">{{ item[0].total }}</span>
                             </div>
                             <list-bar-chart-2-home
                             :list="item"
@@ -566,6 +600,20 @@ import ListBarChart2Home from "@/components/windNeedCharts/list-bar-chart2-home.
 import PieChart from "@/components/windNeedCharts/pieChart.vue";
 import dataJson from "./mapdataJson.json"
 import dataJson2 from "./dataJson.json"
+//并网
+import bw from "@/assets/windimgs/fanSvg/bw.svg"
+//故障
+import gz from "@/assets/windimgs/fanSvg/gz.svg"
+//待机
+import dj from "@/assets/windimgs/fanSvg/dj.svg"
+//检修
+import jx from "@/assets/windimgs/fanSvg/jx.svg"
+//限电
+import xd from "@/assets/windimgs/fanSvg/xd.svg"
+//离线
+import lx from "@/assets/windimgs/fanSvg/lx.svg"
+//受累
+import sl from "@/assets/windimgs/fanSvg/sl.svg"
 export default {
     components: {
         PowerReviewHome,
@@ -574,6 +622,14 @@ export default {
     },
     data() {
         return {
+            showWindStatus: true,
+            bw,
+            gz,
+            jx,
+            dj,
+            xd,
+            lx,
+            sl,
             activeTab: -1,
             wpIds: "KGDL_FGS0",
             powerDataHome: {},
@@ -598,6 +654,7 @@ export default {
         },
         showDetail() {
             this.showWindDetail = !this.showWindDetail
+            this.showWindStatus = !this.showWindStatus
             this.findProjectPlan();
             this.$emit("showDetail", this.showWindDetail)
         },
@@ -794,12 +851,32 @@ export default {
 
 <style lang="less" scoped>
 .panel {
-    backdrop-filter: blur(10px);
-    -webkit-backdrop-filter: blur(10px);
+    background: rgba(248, 249, 252, 0.85);
+    backdrop-filter: blur(15px);
+    -webkit-backdrop-filter: blur(15px);
     border: 1px solid rgba(255, 255, 255, 0.2);
     border-radius: 12px;
+    box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.08);
     padding: 20px;
-    background: rgba(255, 255, 255, 0.15);
+}
+.sidebar-left2{
+    position: absolute;
+    left: 20px;
+    bottom: 20px;
+    width: 450px;
+    .labels{
+        font-size: 16px;
+        font-weight: bold;
+    }
+    .windStatus{
+        display: flex;
+        flex-direction: column;
+        .windVal{
+            position:relative;
+            top: 5px; 
+            left: 10px;
+        }
+    }
 }
 
 /* --- Left Sidebar --- */
@@ -818,7 +895,7 @@ export default {
     background: rgba(255, 255, 255, 0.15);
 }
 .sidebar-left{
-    top: 150px;
+    top: 100px;
     width: 260px;
 }
 
@@ -831,12 +908,12 @@ export default {
 }
 
 .stat-block { margin-bottom: 15px; }
-.stat-block .label { font-size: 26px; color: #fff; margin-bottom: 5px; }
+.stat-block .label { font-size: 26px; color: #6c757d; margin-bottom: 5px; }
 .stat-block .value { font-size: 32px; font-weight: 600; color: #4b55ae; }
-.stat-block .labels { font-size: 14px; color: #fff; margin-bottom: 5px; }
+.stat-block .labels { font-size: 14px; color: #6c757d; margin-bottom: 5px; }
 .stat-block .values { font-size: 16px; font-weight: 600; color: #4b55ae; }
 .progress-bar { height: 4px; background: #e9ecef; border-radius: 2px; margin-top: 10px; }
-.progress-bar-inner { height: 100%; background: #fff; border-radius: 2px; }
+.progress-bar-inner { height: 100%; background: #6c757d; border-radius: 2px; }
 
 /* --- Right Sidebar --- */
 .sidebar-right {
@@ -849,7 +926,7 @@ export default {
     flex-direction: column;
     gap: 20px;
     .info-section{
-        h3 { font-size: 16px; font-weight: 600; text-transform: uppercase; color: #fff; margin-bottom: 5px; }
+        h3 { font-size: 16px; font-weight: 600; text-transform: uppercase; color: #6c757d; margin-bottom: 5px; }
     }
     .energy-system-content {
         padding: 5px 5px 15px 5px;
@@ -871,7 +948,7 @@ export default {
         margin-left: 5px;
         }
         .title {
-        color: #fff;
+        color: #6c757d;
         
         text-align: right;
         .title-name {
@@ -896,7 +973,7 @@ export default {
             span {
                 font-size: 12px;
                 font-weight: 400;
-                color: #fff;
+                color: #6c757d;
             }
             span:nth-child(3) {
                 font-size: 19px;
@@ -917,7 +994,7 @@ export default {
                 .el-col:nth-child(1) {
                 font-size: 12px;
                 font-weight: 400;
-                color: #fff;
+                color: #6c757d;
                 }
                 .el-col:nth-child(2) {
                 font-size: 16px;
@@ -927,7 +1004,7 @@ export default {
                 .el-col:nth-child(3) {
                 font-size: 14px;
                 font-weight: 400;
-                color: #fff;
+                color: #6c757d;
                 }
             }
             }
@@ -972,7 +1049,7 @@ export default {
           font-size: 16px; 
             font-weight: 600; 
             text-transform: uppercase;
-          color: #ffffff;
+          color: #6c757d;
         }
 
         .unit {
@@ -1014,7 +1091,7 @@ export default {
 
           .save-value {
             font-size: 16px;
-            color: #ffffff;
+            color: #6c757d;
             margin: 10px 0;
           }
 
@@ -1058,7 +1135,7 @@ export default {
         .power-name {
             width: 80px;
             margin-bottom: 20px;
-            color: #fff;
+            color: #6c757d;
         }
 
         .power-item {
@@ -1077,7 +1154,7 @@ export default {
                     height: 5px;
                     border-radius: 5px;
                     display: inline-block;
-                    background-color: #fff;
+                    background-color: #6c757d;
                     margin-right: 5px;
                 }
 
@@ -1118,7 +1195,7 @@ export default {
 
                 .amount-nums {
                     font-size: 12px;
-                    color: #fff;
+                    color: #6c757d;
                     margin-left: 10px;
                     display: flex;
                     flex-direction: row;
@@ -1126,7 +1203,7 @@ export default {
 
                     .num-item {
                         font-size: 20px;
-                        color: #ffffff;
+                        color: #6c757d;
                         margin-right: 5px;
                     }
                 }
@@ -1136,7 +1213,7 @@ export default {
                 display: flex;
                 align-items: baseline;
                 font-size: 14px;
-                color: #fff;
+                color: #6c757d;
 
                 .nums {
                     font-size: 20px;
@@ -1201,7 +1278,7 @@ export default {
 
                 .type-num {
                     height: 15px;
-                    color: #fff;
+                    color: #6c757d;
                 }
             }
         }
@@ -1240,7 +1317,7 @@ export default {
   font-size: 14px;
   font-family: Microsoft YaHei;
   font-weight: 400;
-  color: #ffffff;
+  color: #6c757d;
 }
 .status-title {
   width: 100%;
@@ -1248,7 +1325,7 @@ export default {
   flex-direction: row;
   align-items: center;
   justify-content: space-between;
-  h3 { font-size: 16px; font-weight: 600; text-transform: uppercase; color: #fff; margin-bottom: 5px; }
+  h3 { font-size: 16px; font-weight: 600; text-transform: uppercase; color: #6c757d; margin-bottom: 5px; }
 }
 
 .date {
@@ -1273,7 +1350,7 @@ export default {
 
     &.active {
       background: rgba(5, 102, 187, 0.4);
-      color: #ffffff;
+      color: #fff;
     }
   }
 
@@ -1289,7 +1366,7 @@ export default {
 
     &.active {
       background: rgba(5, 102, 187, 0.4);
-      color: #ffffff;
+      color: #fff;
     }
   }
 
@@ -1305,7 +1382,7 @@ export default {
 
     &.active {
       background: rgba(5, 102, 187, 0.4);
-      color: #ffffff;
+      color: #fff;
     }
   }
 }
@@ -1317,6 +1394,6 @@ export default {
 .info-section { font-size: 13px; }
 .info-section h3 { font-size: 12px; font-weight: 600; text-transform: uppercase; color: #6c757d; margin-bottom: 15px; }
 .info-item { display: flex; justify-content: space-between; margin-bottom: 12px; padding: 0 5px; }
-.info-item .label { color: #fff; }
-.info-item .value { color: #fff; display: flex; align-items: center; gap: 5px; }
+.info-item .label { color: #6c757d; }
+.info-item .value { color: #6c757d; display: flex; align-items: center; gap: 5px; }
 </style>

+ 15 - 6
src/views/weatherComponents/cesiumweatherView.vue

@@ -43,7 +43,7 @@
             </div>
             <div class="stat-block">
                 <span class="labels">场站类型 </span>
-                <el-checkbox-group v-model="checkList" class="checkTypeGroup" @change="changeType">
+                <el-checkbox-group v-model="checkList" class="checkTypeGroup">
                     <el-checkbox label="Wind" value="Wind">
                         <img :src="fc" style="width:30px;height:30px;">
                         <span class="values" style="position:relative;top:-10px; margin-right: 3px">风电</span>
@@ -207,6 +207,10 @@ export default {
             type: Object,
             default: () => null
         },
+        stationValue: {
+            type: Array,
+            default: () => []
+        },
     },
     components: {
         devBox,
@@ -218,7 +222,6 @@ export default {
             hd,
             gf,
             chu,
-            checkList: ['Wind', 'Fire', 'Solar', 'Storage'],
             showWeather: false,
             valuechecked: false,
             showWeatherDetail: false,
@@ -330,14 +333,20 @@ export default {
             weatherSvg: ['晴', '多云', '风', '雾', '阴', '雷雨', '雨', '雨加雪', '雪']
         }
     },
+    computed: {
+        checkList: {
+            get() {
+                return this.stationValue; // 从父组件 props 获取值
+            },
+            set(val) {
+                this.$emit('changeType', val); // 向父组件通知变更
+            },
+        },
+    },
     mounted() {
         this.today = DAYJS().format("YYYY年MM月DD日")
     },
     methods: {
-        changeType(value) {
-            console.log('checkList===>>>', value)
-            this.$emit("changeType", value)
-        },
         valueOnChange(it) {
             this.heightArr.forEach(it => {
                 it.check = false