Преглед на файлове

Merge branch 'yx' into wsy

wsy преди 3 години
родител
ревизия
4b478873e3

+ 59 - 22
src/components/chart/combination/bar-line-chart.vue

@@ -24,8 +24,25 @@ export default {
       type: Object,
       default: () => {
         return {
-          area: ["风场1", "风场2", "风场3", "风场4", "风场5", "风场6", "风场7", "风场8", "风场9"],
-          legend: ["实际电量", "计划检修损失", "非计划检修损失", "限电损失", "受累损失", "性能损失"],
+          area: [
+            "风场1",
+            "风场2",
+            "风场3",
+            "风场4",
+            "风场5",
+            "风场6",
+            "风场7",
+            "风场8",
+            "风场9",
+          ],
+          legend: [
+            "实际电量",
+            "计划检修损失",
+            "非计划检修损失",
+            "限电损失",
+            "受累损失",
+            "性能损失",
+          ],
           data: [
             [1320, 1302, 901, 634, 1390, 1330, 1320, 1000, 500],
             [320, 302, 301, 334, 390, 330, 320, 100, 50],
@@ -80,17 +97,16 @@ export default {
       return this.bardata.legend;
     },
     end() {
-      var result = 20;
-      console.log("length:", this.areaData.length);
-      if (this.areaData) {
+      var result = 100;
+      if (this.areaData && this.areaData.length > 0) {
         result = parseInt((this.pageSize / this.areaData.length) * 100);
       }
 
-      console.log("result", result);
       return result;
     },
   },
   methods: {
+    resize() {},
     initChart() {
       let chart = echarts.init(this.$el);
       let option = {
@@ -229,20 +245,22 @@ export default {
         ],
         series: [],
       };
-      // bar data
-      for (var i = 0; i < this.bardata.legend.length; i++) {
-        option.series.push({
-          name: this.bardata.legend[i],
-          type: "bar",
-          stack: "总量",
-          barWidth: 16,
-          label: {
-            show: false,
-            position: "insideRight",
-          },
-          data: this.bardata.data[i],
-        });
-      }
+
+      if (this.bardata && this.bardata.legend)
+        // bar data
+        for (var i = 0; i < this.bardata.legend.length; i++) {
+          option.series.push({
+            name: this.bardata.legend[i],
+            type: "bar",
+            stack: "总量",
+            barWidth: 16,
+            label: {
+              show: false,
+              position: "insideRight",
+            },
+            data: this.bardata.data[i],
+          });
+        }
 
       // line data
       if (this.lineData.length > 0) {
@@ -260,14 +278,20 @@ export default {
           },
         });
       }
-
+console.log(JSON.stringify(option))
       chart.setOption(option);
+
+      this.resize = function() {
+        chart.resize();
+      };
+
+      window.addEventListener("resize", this.resize);
     },
   },
   created() {
     this.id = "pie-chart-" + util.newGUID();
-    this.areaData = this.bardata.area;
     if (this.bardata.area && this.bardata.area.length < this.pageSize) {
+      this.areaData = this.bardata.area;
       for (let i = this.bardata.area.length; i <= this.pageSize; i++) {
         this.areaData.push("");
       }
@@ -285,6 +309,19 @@ export default {
       this.initChart();
     });
   },
+  unmounted() {
+    window.removeEventListener("resize", this.resize);
+  },
+  watch: {
+    bardata(val) {
+      if (val.area && val.area.length < this.pageSize) {
+        this.areaData = val.area;
+        for (let i = val.area.length; i <= this.pageSize; i++) {
+          this.areaData.push("");
+        }
+      }
+    },
+  },
 };
 </script>
 

+ 1 - 2
src/components/chart/combination/scatter-line-chart.vue

@@ -642,7 +642,6 @@ export default {
             color: "#fff",
           },
           formatter: function(params) {
-            debugger;
             if (params.componentType == "markLine") {
               return params.name + "<br />" + params.value;
             }
@@ -740,7 +739,7 @@ export default {
             lineStyle: {
               show: false,
             },
-            yAxisIndex: 1,
+            yAxisIndex: 0,
             xAxisIndex: 1,
             data: value,
           });

+ 179 - 0
src/components/other/fj/index.vue

@@ -0,0 +1,179 @@
+<template>
+  <svg
+    :id="fjId"
+    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"
+    :width="fjWidth"
+    :height="fjHeight"
+  >
+    <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"
+      />
+    </defs>
+    <clipPath id="SVGID_2_">
+      <use xlink:href="#SVGID_1_" overflow="visible" />
+    </clipPath>
+    <clipPath id="SVGID_4_">
+      <use xlink:href="#SVGID_3_" overflow="visible" />
+    </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"
+      />
+    </g>
+    <g>
+      <g>
+        <path
+          :fill="background"
+          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="background"
+          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="background"
+          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
+        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.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
+        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"
+        />
+      </g>
+      <animateTransform
+        attributeName="transform"
+        attributeType="XML"
+        type="rotate"
+        from="0 46.75 39.182"
+        to="359 46.75 39.182"
+        :dur="rotate"
+        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"
+      />
+    </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"
+      />
+    </g>
+  </svg>
+</template>
+
+<script>
+export default {
+  // 名称
+  name: "fj",
+
+  props: {
+    id: {
+      type: String,
+      default: "fj-1",
+    },
+    speed: {
+      type: Number || String,
+      default: "0.5s",
+    },
+    color: {
+      type: String,
+      default: "#4b55ae",
+    },
+    width:{
+      type: String,
+      default: "43px",
+    },
+    height:{
+      type: String,
+      default: "46px",
+    }
+  },
+
+  // 数据
+  data() {
+    return {
+      fjId: "",
+      rotate: "",
+      background: "",
+      fjWidth:"",
+      fjHeight:""
+    };
+  },
+
+  // 函数
+  methods: {},
+
+  created() {
+    this.fjId = this.id;
+    this.rotate = this.speed;
+    this.background = this.color;
+    this.fjWidth = this.width;
+    this.fjHeight = this.height;
+  },
+
+  mounted() {},
+
+  unmounted() {},
+
+  watch: {
+    id(res) {
+      this.fjId = res;
+    },
+    speed(res) {
+      this.rotate = res;
+    },
+    color(res) {
+      this.background = res;
+    },
+    width(res) {
+      this.fjWidth = res;
+    },
+    height(res) {
+      this.fjHeight = res;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 641 - 444
src/router/index.js


+ 19 - 1
src/views/About.vue

@@ -2,6 +2,14 @@
   <div class="about">
     <h1 @click="showDialog">This is an about page</h1>
     <HealthReport :show="show" :params="{ wtId: 'QG01_11', recorddate: '2021-06-19' }" @closed="(res) => { this.show=false; }" />
+    <div class="fjBox1">
+      <!-- 风机 SVG 使用方法 -->
+      <FJ id="fj-1" speed="5s" color="red" width="43px" height="46px" />
+      <FJ :speed="0.1" color="#1890ff" width="200px" height="210px" />
+      <FJ id="fj-3" speed="2s" width="80px" height="82px" />
+      <FJ />
+      <FJ :speed="1" />
+    </div>
     <!-- <list-bar-chart /> -->
   </div>
 </template>
@@ -9,6 +17,7 @@
 <script>
 // import ListBarChart from "../components/chart/bar/list-bar-chart.vue";
 import HealthReport from "@com/other/healthReport/index.vue";
+import FJ from "@com/other/fj/index.vue";
 // 导入header.vue文件
 export default {
   data () {
@@ -19,7 +28,8 @@ export default {
 
   components: {
     // ListBarChart,
-    HealthReport
+    HealthReport,
+    FJ
   },
 
   methods: {
@@ -29,3 +39,11 @@ export default {
   }
 };
 </script>
+<style lang="less" scoped>
+.fjBox{
+  display: flex;
+  justify-content: start;
+  align-items: center;
+  flex-wrap: wrap;
+}
+</style>

+ 2 - 2
src/views/Decision/Decision1.vue

@@ -67,7 +67,7 @@
 		<el-row :type="'flex'" class="content">
 			<el-col :span="12" class="pd-r-8">
 				<toolbar-panel title="风机绩效榜" :showLine="false">
-					<bar-line-chart :height="'calc(100vh - 200px)'" :bardata="bardata" :lineData="lineData"
+					<bar-line-chart :height="'calc(100vh - 180px)'" :bardata="bardata" :lineData="lineData"
 						:color="barColor" lineName="理论发电量" />
 				</toolbar-panel>
 			</el-col>
@@ -76,7 +76,7 @@
 					<div class="project-table">
 						<!-- 分页Table -->
 						<Table :data="tableData"
-							:height="'calc(100vh - 32vh)'">
+							:height="'calc(80vh - 50px)'">
 							<template v-slot:tr v-if="tableData.data.length > 0">
 								<tr>
 									<td style="width: 50px;">

+ 9 - 1
src/views/Decision/Decision2.vue

@@ -113,7 +113,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "../../components/coms/table/table.vue";
+	import Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -363,6 +363,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -406,6 +407,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 10 - 2
src/views/Decision/Decision2Cjdb.vue

@@ -88,7 +88,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "../../components/coms/table/table.vue";
+	import Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -343,6 +343,7 @@
 											that.tableIdArr.push(item.id);
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -386,6 +387,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,
@@ -648,10 +656,10 @@
 							that.tableIdArr.push(item.id);
 							dataTab.push({ //表格
 								index: index + 1,
+								fdl: item.fdl,
 								name: item.name,
 								zhpm: item.zhpm,
 								fdlpm: item.fdlpm,
-								fdl: item.fdl,
 								gzssdlpm: item.gzssdlpm,
 								gzssdl: item.gzssdl,
 								jxssdlpm: item.jxssdlpm,

+ 9 - 1
src/views/Decision/Decision2Cndb.vue

@@ -78,7 +78,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "../../components/coms/table/table.vue";
+	import Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -328,6 +328,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -369,6 +370,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 9 - 1
src/views/Decision/Decision2Xldb.vue

@@ -108,7 +108,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "../../components/coms/table/table.vue";
+	import Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -367,6 +367,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -410,6 +411,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 9 - 1
src/views/Decision/Decision2Xmdb.vue

@@ -98,7 +98,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "../../components/coms/table/table.vue";
+	import Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	export default {
@@ -355,6 +355,7 @@
 
 											dataTab.push({ //表格
 												index: index + 1,
+												fdl:item.fdl,
 												name: item.name,
 												zhpm: item.zhpm,
 												gzssdl: item.gzssdl,
@@ -398,6 +399,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,

+ 9 - 1
src/views/Decision/Decision3.vue

@@ -117,7 +117,7 @@
 	import DualPieChart from "../../components/chart/pie/dual-pie-chart.vue";
 	import SvgIcon from "../../components/coms/icon/svg-icon.vue";
 	import Panel from "../../components/coms/panel/panel.vue";
-	import Table from "../../components/coms/table/table.vue";
+	import Table from "./table.vue";
 	import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
 	import Dayinfo from "./dayinfo.vue";
 	
@@ -150,6 +150,13 @@
 						},
 						{
 							name: "",
+							field: "fdl",
+							is_num: false,
+							is_light: false,
+							display:"none",
+						},
+						{
+							name: "",
 							field: "check",
 							is_num: false,
 							is_light: false,
@@ -960,6 +967,7 @@
 
 							dataTab.push({ //表格
 								index: index + 1,
+								fdl:item.fdl,
 								name: item.name,
 								zhpm: item.zhpm,
 								gzssdl: item.gzssdl,

+ 2 - 2
src/views/Decision/table.vue

@@ -2,7 +2,7 @@
   <table class="com-table">
     <thead>
       <tr>
-        <th v-for="(col, index) of data.column" :key="index" :class="{ light: col.is_light }" :style="{ width: col.width }" @click="onSort(col)">
+        <th v-for="(col, index) of data.column" :key="index" :class="{ light: col.is_light }" :style="{ width: col.width , display : col.display }" @click="onSort(col)">
           {{ col.name }}
         </th>
       </tr>
@@ -13,7 +13,7 @@
           <td
             v-for="(col, i) of data.column"
             :key="i"
-            :style="{ width: col.width }"
+            :style="{ width: col.width , display : col.display}"
             :class="{ light: hoverRow == row || hoverCol == col, num: col.is_num, 'always-light': col.is_light || row.is_light }"
             @mouseenter="hover(row, col)"
             @mouseleave="leave()"

+ 50 - 36
src/views/HealthControl/HealthTab4.vue

@@ -68,7 +68,7 @@
           </div>
         </div>
       </div>
-      
+
       <div class="query-actions" style="margin-right: 500px">
         <button class="btn green" @click="onClickSearch">搜索</button>
       </div>
@@ -77,10 +77,16 @@
       <ComTable :data="tableData" height="80vh"></ComTable>
     </div>
     <div class="dialog-box">
-      <el-dialog title="日信息对比" v-model="dialogVisible" width="1200px" custom-class="modal" :close-on-click-modal="false">
-        <info-history :formdata="trackDate"/>
-      </el-dialog>   
-    </div> 
+      <el-dialog
+        title="日信息对比"
+        v-model="dialogVisible"
+        width="1200px"
+        custom-class="modal"
+        :close-on-click-modal="false"
+      >
+        <info-history :formdata="trackDate" />
+      </el-dialog>
+    </div>
   </div>
 </template>
 
@@ -88,12 +94,12 @@
 import InfoHistory from "./infotrack2.vue";
 import ComTable from "@com/coms/table/table.vue";
 import SvgIcon from "../../components/coms/icon/svg-icon.vue";
-import { warn } from '@vue/runtime-core';
+import { warn } from "@vue/runtime-core";
 
 export default {
   components: { InfoHistory, ComTable, SvgIcon },
   data() {
-    const that = this
+    const that = this;
     return {
       stations: [], // 场站
       windturbines: [], // 风机
@@ -103,35 +109,35 @@ export default {
       endts: new Date(),
       tableData: {
         column: [
-          { 
+          {
             name: "场站",
             field: "wfname",
-            is_light: false
+            is_light: false,
           },
-          { 
+          {
             name: "风机编号",
             field: "wtid",
-            is_light: false
+            is_light: false,
           },
-          { 
+          {
             name: "任务开始时间",
             field: "operationdate",
-            is_light: false
+            is_light: false,
           },
-          { 
+          {
             name: "任务接受时间",
             field: "departuretime",
-            is_light: false
+            is_light: false,
           },
-          { 
+          {
             name: "检修原因",
             field: "reason",
-            is_light: false
+            is_light: false,
           },
-          { 
+          {
             name: "消缺工艺",
             field: "repairedcomment",
-            is_light: false
+            is_light: false,
           },
           {
             name: "操作",
@@ -144,7 +150,7 @@ export default {
             click(e, row) {
               that.onClickTrack(row);
             },
-          }
+          },
         ],
         data: [],
       },
@@ -153,7 +159,8 @@ export default {
     };
   },
   created() {
-    this.starts = new Date(new Date().setMonth(new Date().getMonth()-2)).formatDate("yyyy-MM-dd");
+    this.starts = new Date().formatDate("yyyy-MM") + "-01";
+    // this.starts = "2021-01-01";
     this.requestStations();
   },
   methods: {
@@ -162,13 +169,12 @@ export default {
       this.requestFinishedList();
     },
     // 消缺跟踪
-    onClickTrack(row){
+    onClickTrack(row) {
       this.requestTrack(row);
-      
     },
     // 历史查询
-    onClickHistory(row){
-      this.dialogVisible = true
+    onClickHistory(row) {
+      this.dialogVisible = true;
     },
     // 获取场站
     requestStations() {
@@ -211,25 +217,33 @@ export default {
         },
         success(res) {
           if (res.code == 200) {
-            that.tableData.data = []
-            res.data.forEach(item => {
+            that.tableData.data = [];
+            res.data.forEach((item) => {
               let obj = {
                 wfname: item.wfname,
                 wtid: item.wtid,
-                operationdate: item.operationdate?new Date(item.operationdate).formatDate("yyyy-MM-dd hh:mm:ss"):'',
-                departuretime: item.departuretime?new Date(item.departuretime).formatDate("yyyy-MM-dd hh:mm:ss"):'',
+                operationdate: item.operationdate
+                  ? new Date(item.operationdate).formatDate(
+                      "yyyy-MM-dd hh:mm:ss"
+                    )
+                  : "",
+                departuretime: item.departuretime
+                  ? new Date(item.departuretime).formatDate(
+                      "yyyy-MM-dd hh:mm:ss"
+                    )
+                  : "",
                 reason: item.reason,
                 repairedcomment: item.repairedcomment,
-                rid: item.rid
-              }
-              that.tableData.data.push(obj)
+                rid: item.rid,
+              };
+              that.tableData.data.push(obj);
             });
           }
         },
       });
     },
     // 通过消缺单获得详细信息
-    requestTrack(row){
+    requestTrack(row) {
       let that = this;
       that.API.requestData({
         method: "POST",
@@ -239,12 +253,12 @@ export default {
         },
         success(res) {
           if (res.code == 200) {
-            that.trackDate = res.data
-            that.dialogVisible = true
+            that.trackDate = res.data;
+            that.dialogVisible = true;
           }
         },
       });
-    }
+    },
   },
   watch: {
     station(val) {

+ 342 - 136
src/views/HealthControl/infotrack2.vue

@@ -3,7 +3,11 @@
     <div class="form-info">
       <div class="work-flow">
         <div class="work-flow-line"></div>
-        <div :class="['work-flow-item', item.name == statu(form) ? 'active' : '']" v-for="(item, i) in svgarr" :key="i">
+        <div
+          :class="['work-flow-item', item.name == statu(form) ? 'active' : '']"
+          v-for="(item, i) in svgarr"
+          :key="i"
+        >
           <div class="work-flow-icon-item">
             <div class="work-flow-icon-o"></div>
             <div class="work-flow-icon-i"></div>
@@ -19,104 +23,177 @@
           <el-row>
             <el-col :span="12">
               <el-form-item label="风场:">
-                <el-input v-model="form.wpName" placeholder="风场名称" readonly></el-input>
+                <el-input
+                  v-model="form.wpName"
+                  placeholder="风场名称"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="风机:">
-                <el-input v-model="form.wtId" placeholder="风机名称" readonly></el-input>
+                <el-input
+                  v-model="form.wtId"
+                  placeholder="风机名称"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="12">
               <el-form-item label="推荐检修时间:">
-                <el-input v-model="form.tjss" placeholder="推荐检修时间" readonly></el-input>
+                <el-input
+                  v-model="form.tjss"
+                  placeholder="推荐检修时间"
+                  readonly
+                ></el-input>
                 <!-- <el-date-picker v-model="form.tjjxsj" type="datetime" placeholder="推荐检修时间" popper-class="date-select"></el-date-picker> -->
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="预计检修风速:">
-                <el-input v-model="form.tjfs" placeholder="预计检修风速" readonly></el-input>
+                <el-input
+                  v-model="form.tjfs"
+                  placeholder="预计检修风速"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="24">
               <el-form-item label="推荐理由:">
-                <el-input type="textarea" resize="none" :rows="3" v-model="form.description" placeholder="推荐理由"
-                  readonly></el-input>
+                <el-input
+                  type="textarea"
+                  resize="none"
+                  :rows="3"
+                  v-model="form.description"
+                  placeholder="推荐理由"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="12">
               <el-form-item label="下单时间:">
-                <el-input v-model="form.prodtdepttime" placeholder="下单时间" readonly></el-input>
+                <el-input
+                  v-model="form.prodtdepttime"
+                  placeholder="下单时间"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="主要负责人:">
-                <el-input v-model="form.workleader" placeholder="主要负责人" readonly></el-input>
+                <el-input
+                  v-model="form.workleader"
+                  placeholder="主要负责人"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="12">
               <el-form-item label="出发时间:">
-                <el-input v-model="form.departuretime" placeholder="出发时间" readonly></el-input>
+                <el-input
+                  v-model="form.departuretime"
+                  placeholder="出发时间"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="到达时间:">
-                <el-input v-model="form.arrivaltime" placeholder="到达时间" readonly></el-input>
+                <el-input
+                  v-model="form.arrivaltime"
+                  placeholder="到达时间"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="24">
               <el-form-item label="排查方法:">
-                <el-input type="textarea" resize="none" :rows="3" v-model="form.gzpc" placeholder="排查方法" readonly></el-input>
+                <el-input
+                  type="textarea"
+                  resize="none"
+                  :rows="3"
+                  v-model="form.gzpc"
+                  placeholder="排查方法"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="24">
               <el-form-item label="处理方法:">
-                <el-input type="textarea" resize="none" :rows="3" v-model="form.repairedcomment" placeholder="处理方法"
-                  readonly></el-input>
+                <el-input
+                  type="textarea"
+                  resize="none"
+                  :rows="3"
+                  v-model="form.repairedcomment"
+                  placeholder="处理方法"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="12">
               <el-form-item label="消缺时间:">
-                <el-input v-model="form.repairedtime" placeholder="消缺时间" readonly></el-input>
+                <el-input
+                  v-model="form.repairedtime"
+                  placeholder="消缺时间"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="故障时长:">
-                <el-input v-model="form.degradebugtype" placeholder="故障时长" readonly></el-input>
+                <el-input
+                  v-model="form.degradebugtype"
+                  placeholder="故障时长"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="12">
               <el-form-item label="验收人:">
-                <el-input v-model="form.checkdeptlabornum" placeholder="验收人" readonly></el-input>
+                <el-input
+                  v-model="form.checkdeptlabornum"
+                  placeholder="验收人"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
               <el-form-item label="验收时间:">
-                <el-input v-model="form.checktime" placeholder="验收时间" readonly></el-input>
+                <el-input
+                  v-model="form.checktime"
+                  placeholder="验收时间"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
           <el-row>
             <el-col :span="24">
               <el-form-item label="验收意见:">
-                <el-input type="textarea" resize="none" :rows="3" v-model="form.checkdeptopinion" placeholder="验收意见"
-                  readonly></el-input>
+                <el-input
+                  type="textarea"
+                  resize="none"
+                  :rows="3"
+                  v-model="form.checkdeptopinion"
+                  placeholder="验收意见"
+                  readonly
+                ></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -125,65 +202,142 @@
     </div>
     <div class="evaluate">
       <div class="white">评价</div>
-      <div class="evaluate-item" :class="(form.rwfpsc > form.rwfppjsc ? ' warColor' : '')">
+      <div
+        class="evaluate-item"
+        :class="form.rwfpsc > form.rwfppjsc ? ' warColor' : ''"
+      >
         <div class="evaluate-label">任务分配时长</div>
-        <el-input v-model="form.rwfpsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.rwfpsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
       <div class="evaluate-item">
         <div class="evaluate-label">任务分配平均时长</div>
-        <el-input v-model="form.rwfppjsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.rwfppjsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
-      <div class="evaluate-item" :class="(form.ddxcsc > form.ddxcpjsc ? ' warColor' : '')">
+      <div
+        class="evaluate-item"
+        :class="form.ddxcsc > form.ddxcpjsc ? ' warColor' : ''"
+      >
         <div class="evaluate-label">到达现场时长</div>
-        <el-input v-model="form.ddxcsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.ddxcsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
       <div class="evaluate-item">
         <div class="evaluate-label">到达现场平均时长</div>
-        <el-input v-model="form.ddxcpjsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.ddxcpjsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
-      <div class="evaluate-item" :class="(form.qxclsc > form.qxclpjsc ? ' warColor' : '')">
+      <div
+        class="evaluate-item"
+        :class="form.qxclsc > form.qxclpjsc ? ' warColor' : ''"
+      >
         <div class="evaluate-label">缺陷处理时长</div>
-        <el-input v-model="form.qxclsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.qxclsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
       <div class="evaluate-item">
         <div class="evaluate-label">缺陷处理平均时长</div>
-        <el-input v-model="form.qxclpjsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.qxclpjsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
-      <div class="evaluate-item" :class="(form.yssc > form.yspjsc ? ' warColor' : '')">
+      <div
+        class="evaluate-item"
+        :class="form.yssc > form.yspjsc ? ' warColor' : ''"
+      >
         <div class="evaluate-label">验收时长</div>
-        <el-input v-model="form.yssc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.yssc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
       <div class="evaluate-item">
         <div class="evaluate-label">验收平均时长</div>
-        <el-input v-model="form.yspjsc" style="width: 62px;text-align: center;" placeholder="" readonly></el-input>
+        <el-input
+          v-model="form.yspjsc"
+          style="width: 62px; text-align: center"
+          placeholder=""
+          readonly
+        ></el-input>
         <div class="evaluate-unit">min</div>
       </div>
     </div>
     <div class="tabs">
       <div class="tab-box">
-        <div class="tab-item" v-for="(tab, index) of tabs" :key="index" :class="{ active: activeTab == index }" @click="selectTab(tab,index)">
-          <span class="svg-icon svg-icon-md" :class="activeTab == index ? 'svg-icon-green' : 'svg-icon-write'">
+        <div
+          class="tab-item"
+          v-for="(tab, index) of tabs"
+          :key="index"
+          :class="{ active: activeTab == index }"
+          @click="selectTab(tab, index)"
+        >
+          <span
+            class="svg-icon svg-icon-md"
+            :class="activeTab == index ? 'svg-icon-green' : 'svg-icon-write'"
+          >
             <SvgIcon :svgid="tab.icon"></SvgIcon>
           </span>
           <span>{{ tab.text }}</span>
         </div>
       </div>
     </div>
-    <defect-elimination-tracking ref="det" :show="false" :formdata="formdata"></defect-elimination-tracking>
+    <defect-elimination-tracking
+      ref="det"
+      :show="false"
+      :formdata="formdata"
+    ></defect-elimination-tracking>
     <div class="dialog-box">
-      <el-dialog title="消缺历史" v-model="dialogVisible" width="1200px" height='800px' custom-class="modal"
-        :close-on-click-modal="false">
+      <el-dialog
+        title="消缺历史"
+        v-model="dialogVisible"
+        width="1200px"
+        height="800px"
+        custom-class="modal"
+        :close-on-click-modal="false"
+      >
         <div class="diamain">
           <div class="left">
-            <el-tree :data="data" :props="defaultProps" node-key="id" :default-expand-all="true" custom-class="modal"
-              @node-click="handleNodeClick"></el-tree>
+            <el-tree
+              :data="data"
+              :props="defaultProps"
+              node-key="id"
+              :default-expand-all="true"
+              custom-class="modal"
+              @node-click="handleNodeClick"
+            ></el-tree>
           </div>
           <div class="right">
             <div class="table-box">
@@ -193,12 +347,37 @@
         </div>
       </el-dialog>
     </div>
-    <el-dialog title="查看监控视频" v-model="videoBoxShow" width="80%" height='800px' custom-class="modal"
-      :close-on-click-modal="true">
-      <video class="videoPlayer" id="videoPlayer" muted autoplay webkit-playsinline playsinline></video>
+    <el-dialog
+      title="查看监控视频"
+      v-model="videoBoxShow"
+      width="80%"
+      height="800px"
+      custom-class="modal"
+      :close-on-click-modal="true"
+    >
+      <video
+        class="videoPlayer"
+        id="videoPlayer"
+        muted
+        autoplay
+        webkit-playsinline
+        playsinline
+      ></video>
     </el-dialog>
-    <el-dialog title="GIS地貌" v-model="gisBoxShow" top="100px" width="95%" custom-class="modal gisBox" :close-on-click-modal="true">
-      <iframe width="100%" height="100%" src="http://10.155.32.4:8070/gisweb/ditujiankang.html?LAT=106.23507&LNG=38.48989&userid=1500" sryle="width:100%;height:100%;"></iframe>
+    <el-dialog
+      title="GIS地貌"
+      v-model="gisBoxShow"
+      top="100px"
+      width="95%"
+      custom-class="modal gisBox"
+      :close-on-click-modal="true"
+    >
+      <iframe
+        width="100%"
+        height="100%"
+        src="http://10.155.32.4:8070/gisweb/ditujiankang.html?LAT=106.23507&LNG=38.48989&userid=1500"
+        sryle="width:100%;height:100%;"
+      ></iframe>
     </el-dialog>
   </div>
 </template>
@@ -207,93 +386,116 @@
 import ComTable from "@com/coms/table/table.vue";
 import SvgIcon from "@com/coms/icon/svg-icon.vue";
 import DefectEliminationTracking from "../HealthControl/defect-elimination-tracking.vue"; //手环监控
-import $ from 'jquery';
+import $ from "jquery";
 export default {
   components: {
-    SvgIcon, ComTable,
+    SvgIcon,
+    ComTable,
     DefectEliminationTracking,
   },
   props: {
     formdata: Object,
   },
-  data () {
+  data() {
     return {
       gisBoxShow: false,
       videoBoxShow: false,
-      location: '',
+      location: "",
       tableData: {
         column: [
           {
             name: "消缺描述",
             field: "xqms",
-            is_light: false
+            is_light: false,
           },
           {
             name: "消缺人员",
             field: "xqry",
-            is_light: false
+            is_light: false,
           },
           {
             name: "消缺时间",
             field: "xqsj",
-            is_light: false
+            is_light: false,
           },
           {
             name: "更换部件",
             field: "ghbj",
-            is_light: false
+            is_light: false,
           },
           {
             name: "更换原因",
             field: "ghyy",
-            is_light: false
+            is_light: false,
           },
           {
             name: "更换数量",
             field: "ghsl",
-            is_light: false
+            is_light: false,
           },
         ],
         data: [],
       },
-      data: [{
-        label: '一级 1',
-        children: [{
-          label: '二级 1-1',
-          children: [{
-            label: '三级 1-1-1'
-          }]
-        }]
-      }, {
-        label: '一级 2',
-        children: [{
-          label: '二级 2-1',
-          children: [{
-            label: '三级 2-1-1'
-          }]
-        }, {
-          label: '二级 2-2',
-          children: [{
-            label: '三级 2-2-1'
-          }]
-        }]
-      }, {
-        label: '一级 3',
-        children: [{
-          label: '二级 3-1',
-          children: [{
-            label: '三级 3-1-1'
-          }]
-        }, {
-          label: '二级 3-2',
-          children: [{
-            label: '三级 3-2-1'
-          }]
-        }]
-      }],
+      data: [
+        {
+          label: "一级 1",
+          children: [
+            {
+              label: "二级 1-1",
+              children: [
+                {
+                  label: "三级 1-1-1",
+                },
+              ],
+            },
+          ],
+        },
+        {
+          label: "一级 2",
+          children: [
+            {
+              label: "二级 2-1",
+              children: [
+                {
+                  label: "三级 2-1-1",
+                },
+              ],
+            },
+            {
+              label: "二级 2-2",
+              children: [
+                {
+                  label: "三级 2-2-1",
+                },
+              ],
+            },
+          ],
+        },
+        {
+          label: "一级 3",
+          children: [
+            {
+              label: "二级 3-1",
+              children: [
+                {
+                  label: "三级 3-1-1",
+                },
+              ],
+            },
+            {
+              label: "二级 3-2",
+              children: [
+                {
+                  label: "三级 3-2-1",
+                },
+              ],
+            },
+          ],
+        },
+      ],
       defaultProps: {
-        children: 'children',
-        label: 'label'
+        children: "children",
+        label: "label",
       },
       dialogVisible: false,
       tabs: [
@@ -364,31 +566,31 @@ export default {
         gzpc: null,
         gzjx: null,
         prodtdepttime: null,
-        checkdeptopinion: null
+        checkdeptopinion: null,
       },
 
-      videoConfigHost: '10.155.32.4:9984', // 视频 host
+      videoConfigHost: "10.155.32.4:9984", // 视频 host
       // videoConfigHost: 'localhost:9984', // 视频 host
-      videoConfigToken: 'stream-1', // 视频 token
-      videoConfigStreamprofile: 'Profile_1', // 视频流文件
-      videoPlayer: null // 视频播放实例
+      videoConfigToken: "stream-1", // 视频 token
+      videoConfigStreamprofile: "Profile_1", // 视频流文件
+      videoPlayer: null, // 视频播放实例
     };
   },
-  created () {
+  created() {
     this.setData();
   },
 
-  updated () {
+  updated() {
     this.setData();
   },
 
-  onmounted () {
+  onmounted() {
     this.cancelPlay();
   },
 
   // 函数
   methods: {
-    setData () {
+    setData() {
       this.form = this.formdata;
       this.form.tjss = this.form.tjss
         ? new Date(this.form.tjss).formatDate("yyyy-MM-dd hh:mm:ss")
@@ -409,17 +611,17 @@ export default {
         ? new Date(this.form.checktime).formatDate("yyyy-MM-dd hh:mm:ss")
         : null;
     },
-    handleNodeClick (data) {
-      this.location = data.id
-      this.searchTab(data.id)
+    handleNodeClick(data) {
+      this.location = data.id;
+      this.searchTab(data.id);
     },
-    DateformatDate (val) {
+    DateformatDate(val) {
       return new Date(val).formatDate("yyyy-MM-dd hh:mm:ss");
     },
-    showDet () {
+    showDet() {
       this.$refs.det.show();
     },
-    statu (data) {
+    statu(data) {
       if (null != data.checktime) {
         return "消缺验收";
       } else if (
@@ -445,20 +647,20 @@ export default {
         return "流程未启动";
       }
     },
-    async searchH () {
+    async searchH() {
       const { data } = await this.API.requestData({
         method: "POST",
         subUrl: "/recommen/findLocationTreeByWtId",
         data: {
           wtId: this.form.wtId,
         },
-      })
-      this.dialogVisible = true
-      this.data = data.data
-      this.location = data.data[0].id
-      this.searchTab()
+      });
+      this.dialogVisible = true;
+      this.data = data.data;
+      this.location = data.data[0].id;
+      this.searchTab();
     },
-    async searchTab () {
+    async searchTab() {
       const { data } = await this.API.requestData({
         method: "POST",
         subUrl: "/recommen/findWobugeqByLocation",
@@ -467,12 +669,13 @@ export default {
             pageNum: 1,
             pageSize: 10,
           },
-          location: this.location
+          location: this.location,
         },
-      })
-      this.tableData.data = data.data
+      });
+      this.tableData.data = data.data;
+      console.log(123123,data)
     },
-    showVideoBox () {
+    showVideoBox() {
       this.videoBoxShow = true;
       this.$nextTick(() => {
         this.listenEvent();
@@ -480,22 +683,24 @@ export default {
       });
     },
     // 销毁播放实例
-    cancelPlay () {
-      $('.videoPlayer').attr('poster', "").attr('src', "");
-      this.videoPlayer && this.videoPlayer.disconnect() && (this.videoPlayer = null);
+    cancelPlay() {
+      $(".videoPlayer").attr("poster", "").attr("src", "");
+      this.videoPlayer &&
+        this.videoPlayer.disconnect() &&
+        (this.videoPlayer = null);
     },
 
     // 监听视频被暂停和被播放
-    listenEvent () {
+    listenEvent() {
       let that = this;
 
       //判断设备
       if (H5siOS() === true || H5sSafariBrowser() === true) {
-        $('.videoPlayer').prop('controls', true);
+        $(".videoPlayer").prop("controls", true);
       }
 
       //如果是暂停状态,就让它开始;如果是开始就让他暂停。每次开始之前都先清空参数
-      $('.videoPlayer').on('click', function () {
+      $(".videoPlayer").on("click", function () {
         if ($(this).get(0).paused) {
           that.resetVideo();
         } else {
@@ -503,24 +708,24 @@ export default {
           $(this).get(0).pause();
           this.BASE.showMsg({
             type: "success",
-            msg: "暂停播放"
+            msg: "暂停播放",
           });
         }
       });
     },
 
     // 重置视频播放状态
-    resetVideo () {
+    resetVideo() {
       this.$nextTick(() => {
         let videoConfig = {
-          videoid: 'videoPlayer',//跟上面video标签的id一致
-          protocol: 'http:', //'http:' or 'https:'
+          videoid: "videoPlayer", //跟上面video标签的id一致
+          protocol: "http:", //'http:' or 'https:'
           host: this.videoConfigHost, //'localhost:8080'自己内部的网址
-          rootpath: '/', // '/' or window.location.pathname
-          token: this.videoConfigToken,//可变参数
+          rootpath: "/", // '/' or window.location.pathname
+          token: this.videoConfigToken, //可变参数
           // streamprofile: this.videoConfigStreamprofile, // {string} - stream profile, main/sub or other predefine transcoding profile
-          hlsver: 'v1', //v1 is for ts, v2 is for fmp4
-          session: 'e312287e-d809-4b4b-a5d6-336e5006199f' //session got from login可变参数
+          hlsver: "v1", //v1 is for ts, v2 is for fmp4
+          session: "e312287e-d809-4b4b-a5d6-336e5006199f", //session got from login可变参数
         };
 
         this.cancelPlay();
@@ -529,9 +734,8 @@ export default {
 
         this.BASE.showMsg({
           type: "success",
-          msg: "播放组件初始化中...请稍后..."
+          msg: "播放组件初始化中...请稍后...",
         });
-
       });
     },
     selectTab: function (tab, index) {
@@ -543,8 +747,8 @@ export default {
       } else if (index === 2) {
         this.showVideoBox();
       }
-      if (tab.text == '消缺历史') {
-        this.searchH()
+      if (tab.text == "消缺历史") {
+        this.searchH();
       }
     },
   },
@@ -560,6 +764,8 @@ export default {
   justify-content: space-between;
   .left {
     width: 30%;
+    height: 100%;
+    background: rgba(96, 103, 105, 0.2);
     overflow-y: auto;
   }
   .right {
@@ -741,7 +947,7 @@ export default {
           position: relative;
           background-image: @greenLinearTop;
           &::after {
-            content: '';
+            content: "";
             position: absolute;
             width: 100%;
             height: 5px;

+ 1 - 1
src/views/LightMatrix/LightMatrix.vue

@@ -333,7 +333,7 @@ export default {
           return "pink";
           break;
         case 6:
-          return "write";
+          return "pink";
           break;
       }
     },

+ 38 - 12
src/views/LightMatrix1/LightMatrix1.vue

@@ -56,7 +56,10 @@
           <div class="item">
             <div class="loop"></div>
             <span class="svg-icon svg-icon-gray svg-icon-md">
-              <SvgIcon :svgid="'svg-photovoltaic'" style="margin: 3px 0px -3px 1px;"></SvgIcon>
+              <SvgIcon
+                :svgid="'svg-photovoltaic'"
+                style="margin: 3px 0px -3px 1px"
+              ></SvgIcon>
             </span>
           </div>
           <div class="item write" @click="changeShow('jrfj1_GDC')">
@@ -101,15 +104,31 @@
             <i class="svg-icon svg-icon-sm svg-icon-green">
               <SvgIcon :svgid="'svg-wind-site'"></SvgIcon>
             </i>
-            <span>{{ sourceMap.fczbmap[sourceMap.fjmap[pIndex][0].wpId].name || "------" }}</span>
-            <div class="sub-title-item" v-for="(fcItem, fcIndex) in fcStateArray" :key="fcIndex">
+            <span>{{
+              sourceMap.fczbmap[sourceMap.fjmap[pIndex][0].wpId].name ||
+              "------"
+            }}</span>
+            <div
+              class="sub-title-item"
+              v-for="(fcItem, fcIndex) in fcStateArray"
+              :key="fcIndex"
+            >
               <span class="sub-title">{{ fcItem.text }}</span>
-              <span class="sub-count" :class="fcItem.color">{{ sourceMap.fczbmap[sourceMap.fjmap[pIndex][0].wpId][fcItem.key] }}</span>
+              <span class="sub-count" :class="fcItem.color">{{
+                sourceMap.fczbmap[sourceMap.fjmap[pIndex][0].wpId][fcItem.key]
+              }}</span>
             </div>
           </div>
         </div>
         <div class="panel-body">
-          <div class="card" v-for="(cItem, cIndex) of pItem" :key="cIndex" v-show="cItem.isShow" :class="cItem.color" @click="goDetails(cItem)">
+          <div
+            class="card"
+            v-for="(cItem, cIndex) of pItem"
+            :key="cIndex"
+            v-show="cItem.isShow"
+            :class="cItem.color"
+            @click="goDetails(cItem)"
+          >
             {{ cItem.wtnum }}
           </div>
           <!-- 站位用 保证卡片布局最后一行不会有问题 -->
@@ -248,10 +267,10 @@ export default {
           return "orange";
           break;
         case 5:
-          return "purple";
+          return "pink";
           break;
         case 6:
-          return "write";
+          return "pink";
           break;
       }
     },
@@ -324,11 +343,17 @@ export default {
     },
 
     // 查看风机详情
-    goDetails(item){
-      this.$router.push({
-        path: `/monitor/windsite/info/${item.wpId}/${item.wtId}`,
-      });
-    }
+    goDetails(item) {
+      if (item.wpId.indexOf("FDC") !== -1) {
+        this.$router.push({
+          path: `/monitor/windsite/info/${item.wpId}/${item.wtId}`,
+        });
+      } else {
+        this.$router.push({
+          path: `/monitor/windsite/inverter-info/${item.wpId}/${item.wtId}`,
+        });
+      }
+    },
   },
 
   created() {
@@ -589,6 +614,7 @@ export default {
         margin-right: 2px;
         margin-top: 2px;
         flex: 1 0 40px;
+        cursor: pointer;
       }
 
       .card {

+ 2 - 2
src/views/LightMatrix2/LightMatrix2.vue

@@ -293,10 +293,10 @@ export default {
           return "orange";
           break;
         case 5:
-          return "purple";
+          return "pink";
           break;
         case 6:
-          return "write";
+          return "pink";
           break;
       }
     },

+ 1 - 1
src/views/LightMatrix3/LightMatrix3.vue

@@ -68,7 +68,7 @@
             </div>
           </div>
           <div class="panel-body">
-            <div class="card" v-for="(cItem, cIndex) in pItem" :key="cIndex" :class="cItem.color" @click="goDetails(cItem)">
+            <div class="card" v-for="(cItem, cIndex) in pItem" :key="cIndex" :class="cItem.color">
               <div class="card-panel">
                 <div class="card-left">
                   <div class="tag">{{ cItem.wtnum }}</div>

+ 21 - 21
src/views/WindSite/components/boosterstation/mch/previewPicture.vue

@@ -60,7 +60,7 @@
 				isChange: true,
 				// 图片显示默认大小
 				width: "1400px",
-				height: "850px",
+				height: "950px",
 				// 可缩小倍数,为空则可无限缩小
 				minification: 3,
 				// 可放大倍数 为空则可无限放大
@@ -98,7 +98,7 @@
 				let _this = this;
 				img.onerror = () => {
 					// console.log("加载失败!!", _this.arrIcon.length);
-					console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
+					// console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
 					_this.imgOnerror = true;
 					_this.imgIndex =
 						_this.arrIcon.length - 1 < 0 ? 0 : _this.arrIcon.length - 1;
@@ -167,10 +167,10 @@
 							iconWidth: _this[StrWidth],
 							iconHeight: _this[StrHeight],
 						});
-						console.log(
-							"tow#################################arrIcon",
-							_this[arr].length
-						);
+						// console.log(
+						// 	"tow#################################arrIcon",
+						// 	_this[arr].length
+						// );
 					}
 					// _this[StrWidth] = `${e.path[0].naturalWidth}px`;
 					// _this[StrHeight] = `${e.path[0].naturalHeight}px`;
@@ -189,11 +189,11 @@
 				var that = this;
 				// var oImg = document.getElementsByClassName("movableItem")[0];
 				var oImg = this.$refs.bigImage;
-				console.log(
-					"length",
-					document.getElementsByClassName("movableItem").length
-				);
-				console.log("oImg", oImg);
+				// console.log(
+				// 	"length",
+				// 	document.getElementsByClassName("movableItem").length
+				// );
+				// console.log("oImg", oImg);
 				var _this = this;
 
 				function fnWheel(obj, fncc) {
@@ -242,12 +242,12 @@
 						// 限制缩小范围
 						if (nowWidth <= parseInt(initWidth / _this.minification)) {
 							miniFlag = false;
-							console.log("限制缩小范围");
-							console.log(
-								"限制缩小范围",
-								nowWidth,
-								parseInt(initWidth / _this.minification)
-							);
+							// console.log("限制缩小范围");
+							// console.log(
+							// 	"限制缩小范围",
+							// 	nowWidth,
+							// 	parseInt(initWidth / _this.minification)
+							// );
 							this.style.width = parseInt(initWidth / _this.minification) + "px";
 							this.style.height =
 								parseInt(initHeight / _this.minification) + "px";
@@ -256,7 +256,7 @@
 							// 限制放大范围
 							if (nowWidth >= parseInt(initWidth * _this.magnification)) {
 								magniFlag = false;
-								console.log("限制放大范围");
+								// console.log("限制放大范围");
 								this.style.width =
 									parseInt(initWidth * _this.magnification) + "px";
 								this.style.height =
@@ -266,14 +266,14 @@
 					}
 
 					if (down && miniFlag) {
-						console.log("缩小");
+						// console.log("缩小");
 						this.style.width = parseInt(this.offsetWidth * 0.9) + "px";
 						this.style.height = parseInt(this.offsetHeight * 0.9) + "px";
 						
 						that.width = parseInt(this.offsetWidth * 0.9) + "px";
 						that.height = parseInt(this.offsetHeight * 0.9) + "px";
 					} else if (!down && magniFlag) {
-						console.log("放大");
+						// console.log("放大");
 						this.style.width = parseInt(this.offsetWidth * 1.1) + "px";
 						this.style.height = parseInt(this.offsetHeight * 1.1) + "px";
 						that.width = parseInt(this.offsetWidth * 1.1) + "px";
@@ -610,7 +610,7 @@
 <style lang="less" scoped>
 	.pop-up-main {
 		width: 100%;
-		height: calc(100vh - 10vh);
+		height: calc(100vh - 12vh);
 		overflow-y:hidden ;
 
 		.paln-box {

+ 697 - 0
src/views/WindSite/components/generalappearance/xs/previewPicture.vue

@@ -0,0 +1,697 @@
+<template>
+	<div class="pop-up-main">
+		<div class="paln-box">
+			<div class="movableItem" :style="{width:width,height:height}" @mousewheel="rollImg($event)"
+				@mousedown="drag($event,1)" ref="bigImage">
+				<!-- 图片不可选中 或不可拖拽到新标签打开-->
+				<slot name="svg" oncontextmenu="return false;" onselectstart="return false;" draggable="false"></slot>
+				<template v-if="isEdit &&iconWidth">
+					<img ref="signImage" :src="iconImgUrl" @mousedown="dragSign($event,key)"
+						v-for="(item,key) in equipment" :key="key"
+						:style="{top:equipment[key].top+'%',left:equipment[key].left+'%',width:iconWidth,height:iconHeight}"
+						class="equipment" />
+				</template>
+				<el-popover width="200" placement="bottom-start" trigger="hover" :close-delay="100" content="暂无描述"
+					v-else-if="!isEdit&&iconWidth &&arrIcon.length==equipment.length " v-for="(item,key) in equipment"
+					:key="key" popper-class="preview-popover">
+					<!-- &&arrIcon.length==equipment.length -->
+					<template>
+						<div v-if="equipment[key].describe" class="describe">
+							<p class="describe-top">{{equipment[key].describe.deviceName}}</p>
+							<p class="describe-center">{{equipment[key].describe.remark}}</p>
+							<p class="describe-bottom">{{equipment[key].describe.location}}</p>
+						</div>
+					</template>
+					<!-- <img oncontextmenu="return false;" onselectstart="return false;" draggable="false" slot="reference"
+						ref="signImage" :src="$baseUrl + equipment[key].iconImgUrl"
+						:style="{top:equipment[key].top+'%',left:equipment[key].left+'%',width:arrIcon[key].iconWidth,height:arrIcon[key].iconHeight}"
+						class="equipment" /> -->
+				</el-popover>
+			</div>
+		</div>
+	</div>
+</template>
+<script>
+	export default {
+		props: {
+			equipment: {
+				type: Array,
+				default: () => {
+					return [{
+						iconImgUrl: "",
+						top: 0,
+						left: 0,
+					}, ];
+				},
+			},
+			isEdit: {
+				default: false,
+			},
+			imgUrl: {},
+		},
+
+		data() {
+			return {
+				// 定时器
+				timer: "",
+				// 图片加载失败
+				imgOnerror: false,
+				imgIndex: 0,
+				isChange: true,
+				// 图片显示默认大小
+				width: "1400px",
+				height: "0px",
+				// 可缩小倍数,为空则可无限缩小
+				minification: 3,
+				// 可放大倍数 为空则可无限放大
+				magnification: "",
+				bigMaxWidth: 1600,
+				bigMaxHeight: 800,
+
+				// 小图标信息
+				iconImgUrl: "",
+				iconWidth: "",
+				// 存储每个小图标处理好的宽高
+				iconHeight: "",
+				arrIcon: [],
+				iconMaxWidth: 32,
+				iconMaxHeight: 32,
+				tog: 1,
+			};
+		},
+		methods: {
+			// 获取图片大小
+			getImgInfo(
+				imgUrl,
+				MaxWidth,
+				MaxHeight,
+				StrWidth,
+				StrHeight,
+				Array = false,
+				arr,
+				num = 0
+			) {
+				var img = new Image();
+
+				// img.src = imgUrl;
+				img = document.getElementsByClassName("svg")
+				let _this = this;
+				img.onerror = () => {
+					// console.log("加载失败!!", _this.arrIcon.length);
+					// console.log(imgUrl, MaxWidth, MaxHeight, StrWidth, StrHeight);
+					_this.imgOnerror = true;
+					_this.imgIndex =
+						_this.arrIcon.length - 1 < 0 ? 0 : _this.arrIcon.length - 1;
+					this.timer = setTimeout(() => {
+						if (num <= 5) {
+							_this.getImgInfo(
+								imgUrl,
+								MaxWidth,
+								MaxHeight,
+								StrWidth,
+								StrHeight,
+								Array,
+								arr,
+								num + 1
+							);
+						}
+						clearInterval(this.timer);
+					}, 2000);
+				};
+				img.onload = function(e) {
+					//  显示时 初始 最大宽度
+					let maxWidth = MaxWidth;
+					//  显示时 初始 最大高度
+					let maxHeight = MaxHeight;
+					if (
+						e.path[0].naturalWidth <= maxWidth &&
+						e.path[0].naturalHeight <= maxHeight
+					) {
+						_this[StrWidth] = e.path[0].naturalWidth + "px";
+						_this[StrHeight] = e.path[0].naturalHeight + "px";
+					} else {
+						_this[StrWidth] = e.path[0].naturalWidth + "px";
+						_this[StrHeight] = e.path[0].naturalHeight + "px";
+						if (
+							e.path[0].naturalWidth > maxWidth &&
+							e.path[0].naturalHeight <= maxHeight
+						) {
+							let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+							_this[StrWidth] = "1600px";
+							_this[StrHeight] = maxWidth / ratio + "px";
+						} else if (
+							e.path[0].naturalWidth <= maxWidth &&
+							e.path[0].naturalHeight > maxHeight
+						) {
+							let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+							_this[StrWidth] = maxHeight * ratio + "px";
+							_this[StrHeight] = "800px";
+						} else if (
+							e.path[0].naturalWidth > maxWidth &&
+							e.path[0].naturalHeight > maxHeight
+						) {
+							let ratio = e.path[0].naturalWidth / e.path[0].naturalHeight;
+							let w = maxWidth;
+							let h = w / ratio;
+							if (h > maxHeight) {
+								let ratio2 = w / h;
+								h = maxHeight;
+								w = h * ratio2;
+							}
+							_this[StrWidth] = w + "px";
+							_this[StrHeight] = h + "px";
+						}
+					}
+					if (Array) {
+						_this[arr].push({
+							iconWidth: _this[StrWidth],
+							iconHeight: _this[StrHeight],
+						});
+						// console.log(
+						// 	"tow#################################arrIcon",
+						// 	_this[arr].length
+						// );
+					}
+					// _this[StrWidth] = `${e.path[0].naturalWidth}px`;
+					// _this[StrHeight] = `${e.path[0].naturalHeight}px`;
+					// vm.$set(vm.imgInfo, "width", img.width);
+					// vm.$set(vm.imgInfo, "height", img.height);
+					// console.log("打印图片信息", imgUrl, _this[StrWidth], _this[StrHeight]); // 打印图片信息
+
+					// console.log("打印图片信息", e.path[0].naturalHeight); // 打印图片信息
+					// console.log("打印图片信息", e); // 打印图片信息
+					// console.log("打印图片信息this.width", _this[StrWidth]); // 打印图片信息
+					// console.log("打印图片信息this.height", _this[StrHeight]); // 打印图片信息
+				};
+			},
+			// 缩放
+			rollImg() {
+				var that = this;
+				// var oImg = document.getElementsByClassName("movableItem")[0];
+				var oImg = this.$refs.bigImage;
+				// console.log(
+				// 	"length",
+				// 	document.getElementsByClassName("movableItem").length
+				// );
+				// console.log("oImg", oImg);
+				var _this = this;
+
+				function fnWheel(obj, fncc) {
+					obj.onmousewheel = fn;
+					if (obj.addEventListener) {
+						obj.addEventListener("DOMMouseScroll", fn, false);
+					}
+
+					function fn(ev) {
+						var oEvent = ev || window.event;
+						var down = true;
+						if (oEvent.detail) {
+							down = oEvent.detail > 0;
+						} else {
+							down = oEvent.wheelDelta < 0;
+						}
+						if (fncc) {
+							fncc.call(this, down, oEvent);
+						}
+						if (oEvent.preventDefault) {
+							oEvent.preventDefault();
+						}
+						return false;
+					}
+				}
+				fnWheel(oImg, function(down, oEvent) {
+					var oldWidth = this.offsetWidth;
+					var oldHeight = this.offsetHeight;
+					var oldLeft = this.offsetLeft;
+					var oldTop = this.offsetTop;
+					var parent = oEvent.path[2];
+					// 获取父元素距离页面可视区域的位置
+					var parentLeft = parent.getBoundingClientRect().left;
+					var parentTop = parent.getBoundingClientRect().top;
+					// 比例 = (点击位置距离可视窗口位置 - 父元素距离可视窗口位置 - 相对定位的left)/ 本身宽度
+					var scaleX = (oEvent.clientX - parentLeft - oldLeft) / oldWidth; //比例
+					var scaleY = (oEvent.clientY - parentTop - oldTop) / oldHeight;
+
+					let nowWidth = this.style.width.split("p")[0];
+					let initWidth = _this.width.split("p")[0];
+					let initHeight = _this.height.split("p")[0];
+
+					let miniFlag = true;
+					let magniFlag = true;
+					if (_this.minification) {
+						// 限制缩小范围
+						if (nowWidth <= parseInt(initWidth / _this.minification)) {
+							miniFlag = false;
+							// console.log("限制缩小范围");
+							// console.log(
+							// 	"限制缩小范围",
+							// 	nowWidth,
+							// 	parseInt(initWidth / _this.minification)
+							// );
+							this.style.width = parseInt(initWidth / _this.minification) + "px";
+							this.style.height =
+								parseInt(initHeight / _this.minification) + "px";
+						}
+						if (_this.magnification) {
+							// 限制放大范围
+							if (nowWidth >= parseInt(initWidth * _this.magnification)) {
+								magniFlag = false;
+								// console.log("限制放大范围");
+								this.style.width =
+									parseInt(initWidth * _this.magnification) + "px";
+								this.style.height =
+									parseInt(initHeight * _this.magnification) + "px";
+							}
+						}
+					}
+
+					if (down && miniFlag) {
+						// console.log("缩小");
+						this.style.width = parseInt(this.offsetWidth * 0.9) + "px";
+						this.style.height = parseInt(this.offsetHeight * 0.9) + "px";
+						
+						that.width = parseInt(this.offsetWidth * 0.9) + "px";
+						that.height = parseInt(this.offsetHeight * 0.9) + "px";
+					} else if (!down && magniFlag) {
+						// console.log("放大");
+						this.style.width = parseInt(this.offsetWidth * 1.1) + "px";
+						this.style.height = parseInt(this.offsetHeight * 1.1) + "px";
+						that.width = parseInt(this.offsetWidth * 1.1) + "px";
+						that.height = parseInt(this.offsetHeight * 1.1) + "px";
+					}
+					var newWidth = this.offsetWidth;
+					var newHeight = this.offsetHeight;
+
+					// 新的相对位置left = 原先的相对位置left - 比例 *(本身新的宽度-旧的宽度)
+					this.style.left =
+						Math.round(this.offsetLeft - scaleX * (newWidth - oldWidth)) + "px";
+					this.style.top =
+						Math.round(this.offsetTop - scaleY * (newHeight - oldHeight)) + "px";
+				});
+				// console.log(that.width)
+			},
+			// },
+			//拖拽
+			drag(ev) {
+				// var ie = document.all;
+				// console.log(ev / 0);
+
+				var nn6 = document.getElementById && !document.all;
+				var isdrag = false;
+				var y, x;
+				var nTY, nTX;
+				var oDragObj;
+
+				function moveMouse(e) {
+					if (isdrag) {
+						oDragObj.style.top =
+							(nn6 ? nTY + e.clientY - y : nTY + event.clientY - y) + "px";
+						oDragObj.style.left =
+							(nn6 ? nTX + e.clientX - x : nTX + event.clientX - x) + "px";
+						return false;
+					}
+				}
+
+				function initDrag(e) {
+					// console.log("点击图片initDrag");
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className != "movableItem"
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className == "movableItem") {
+						isdrag = true;
+						oDragObj = oDragHandle;
+						// 父元素宽高
+						let width = e.path[2].offsetWidth;
+						let height = e.path[2].offsetHeight;
+						// 这里判断第一次获取不到style 样式 默认为 居中50%
+						if (oDragObj.style.top == "") {
+							// nTY = parseInt((50 * height) / 100 + 0);
+							nTY = 0;
+							nTX = parseInt((50 * width) / 100 + 0);
+						} else {
+							nTY = parseInt(oDragObj.style.top + 0);
+							nTX = parseInt(oDragObj.style.left + 0);
+						}
+						y = nn6 ? e.clientY : event.clientY;
+						x = nn6 ? e.clientX : event.clientX;
+						oDragObj.style.cursor = "move";
+						document.onmousemove = moveMouse;
+						return false;
+					}
+				}
+				document.onmousemove = initDrag;
+				// document.onmouseup = new Function("isdrag=false");
+				document.onmouseup = function(e) {
+					isdrag = false;
+					document.onmousemove = null;
+					document.onmouseup = null;
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className != "movableItem"
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className == "movableItem") {
+						oDragObj = oDragHandle;
+						oDragObj.style.cursor = "Default";
+					}
+				};
+				ev = event || window.event;
+
+				// 取消事件冒泡行为
+				// window.event ? (window.event.cancelBubble = true) : ev.stopPropagation();
+			},
+			// 拖拽标记
+			// eslint-disable-next-line no-unused-vars
+			dragSign(ev, key) {
+				var nn6 = document.getElementById && !document.all;
+				var isdrag = false;
+				var y, x;
+				var nTY, nTX;
+				var oDragObj;
+				let _this = this;
+
+				function moveMouse(e) {
+
+					if (isdrag) {
+						this.equipmentKey = key;
+						// console.log("thisequipmentKey", this.equipmentKey);
+
+						let widthItem = e.path[1].style.width.split("p");
+						let heightItem = e.path[1].style.height.split("p");
+						let width = widthItem[0];
+						// eslint-disable-next-line no-unused-vars
+						let height = heightItem[0];
+						let top =
+							((nn6 ?
+									(nTY / 100) * height + e.clientY - y :
+									(nTY / 100) * height + event.clientY - y) /
+								height) *
+							100;
+						let left =
+							((nn6 ?
+									(nTX / 100) * width + e.clientX - x :
+									(nTX / 100) * width + event.clientX - x) /
+								width) *
+							100;
+
+						if (top >= 0 && top <= 100) {
+							_this.equipment[key].top = top;
+						}
+						if (left >= 0 && left <= 100) {
+							_this.equipment[key].left = left;
+						}
+
+						return false;
+					}
+				}
+				// eslint-disable-next-line no-unused-vars
+				function initDrag(e) {
+					// console.log("_this", _this);
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className.indexOf("equipment") == -1
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className.indexOf("equipment") != -1) {
+						isdrag = true;
+						oDragObj = oDragHandle;
+						// 父元素宽高
+						let width = e.path[1].offsetWidth;
+						let height = e.path[1].offsetHeight;
+						// console.log(width, height);
+						console.log("oDragObj.style", oDragObj.style);
+						// 这里判断第一次获取不到style 样式 默认为 居中50%
+						if (oDragObj.style.top == "") {
+							nTY = parseInt((50 * height) / 100 + 0);
+							nTX = parseInt((50 * width) / 100 + 0);
+						} else if (oDragObj.style.top.indexOf("%") != -1) {
+							nTY = oDragObj.style.top.split("%")[0];
+							nTX = oDragObj.style.left.split("%")[0];
+						} else {
+							nTY = parseInt(oDragObj.style.top + 0);
+							nTX = parseInt(oDragObj.style.left + 0);
+						}
+						y = nn6 ? e.clientY : event.clientY;
+						x = nn6 ? e.clientX : event.clientX;
+
+						oDragObj.style.cursor = "move";
+						document.onmousemove = moveMouse;
+						return false;
+					}
+				}
+
+				// document.onmousedown = initDrag;
+				document.onmousemove = initDrag;
+
+				document.onmouseup = function(e) {
+					isdrag = false;
+					document.onmousemove = null;
+					document.onmouseup = null;
+					var oDragHandle = nn6 ? e.target : event.srcElement;
+					var topElement = "HTML";
+					while (
+						oDragHandle.tagName != topElement &&
+						oDragHandle.className != "equipment"
+					) {
+						oDragHandle = nn6 ?
+							oDragHandle.parentNode :
+							oDragHandle.parentElement;
+					}
+					if (oDragHandle.className == "equipment") {
+						oDragObj = oDragHandle;
+						oDragObj.style.cursor = "Default";
+					}
+				};
+
+				// _this.equipmentKey = key;
+				// _this.equipment[_this.equipmentKey].left = l;
+				// _this.equipment[_this.equipmentKey].top = t;
+				ev = event || window.event;
+
+				// 取消事件冒泡行为
+				window.event ? (window.event.cancelBubble = true) : ev.stopPropagation();
+			},
+		},
+		
+		watch: {
+			equipment() {
+				if (this.equipment.length != 0) {
+					this.arrIcon = [];
+					let finish = true;
+					this.equipment.filter((item) => {
+						if (!item.iconImgUrl) {
+							finish = false;
+						}
+						return true;
+					});
+					console.log("finish", finish);
+					if (finish) {
+						this.equipment.filter((item, index) => {
+							if (index >= this.imgIndex) {
+								console.log("iconImgUrl", this.equipment[index].iconImgUrl);
+								this.getImgInfo(
+									this.$baseUrl + item.iconImgUrl,
+									this.iconMaxWidth,
+									this.iconMaxHeight,
+									"iconWidth",
+									"iconHeight",
+									true,
+									"arrIcon"
+								);
+							}
+							// console.log("22filter", index);
+							return true;
+						});
+					}
+				}
+			},
+		},
+		created() {
+			this.getImgInfo(
+				this.imgUrl,
+				this.bigMaxWidth,
+				this.bigMaxHeight,
+				"width",
+				"height"
+			);
+			if (this.equipment.length != 0) {
+				this.arrIcon = [];
+				let finish = true;
+				this.equipment.filter((item) => {
+					if (!item.iconImgUrl) {
+						finish = false;
+					}
+					return true;
+				});
+				// console.log("finish", finish);
+				if (finish) {
+					this.equipment.filter((item, index) => {
+						if (index >= this.imgIndex) {
+							console.log("iconImgUrl", this.equipment[index].iconImgUrl);
+							this.getImgInfo(
+								this.$baseUrl + item.iconImgUrl,
+								this.iconMaxWidth,
+								this.iconMaxHeight,
+								"iconWidth",
+								"iconHeight",
+								true,
+								"arrIcon"
+							);
+						}
+						// console.log("22filter", index);
+						return true;
+					});
+				}
+			}
+
+			this.iconImgUrl = JSON.parse(
+				JSON.stringify(this.$baseUrl + this.equipment[0].iconImgUrl)
+			);
+			// console.log("imgUrl", this.imgUrl);
+			// console.log("equipment", this.equipment);
+			// //禁止鼠标右键
+			// document.oncontextmenu = function() {
+			//   return false;
+			// };
+		},
+	};
+</script>
+<style lang="less">
+	.preview-popover {
+		background-color: #d3edf7dd;
+		padding: 12px;
+
+		.popper__arrow::after {
+			border-bottom-color: #d3edf7dd !important;
+		}
+
+		.describe {
+			p {
+				padding-bottom: 5px;
+
+				&:last-child {
+					padding-bottom: 0px;
+				}
+			}
+
+			.describe-top {
+				// color: sandybrown;
+				// color: red;
+				color: rgb(21, 110, 110);
+			}
+
+			.describe-center {
+				color: rgb(79, 21, 206);
+			}
+
+			.describe-bottom {
+				color: rgb(30, 31, 29);
+			}
+		}
+	}
+</style>
+<style lang="less" scoped>
+	.pop-up-main {
+		width: 100%;
+		height: calc(100vh - 18vh);
+		overflow-y:hidden ;
+
+		.paln-box {
+			width: 100%;
+			height: 100%;
+			position: relative;
+
+			.movableItem {
+				position: absolute;
+				// top: 75%;
+				left: 50%;
+				transform: translate(-50%, -10%);
+
+				img,
+				.svg {
+					z-index: 1;
+					width: 100%;
+					height: 100%;
+				}
+
+				.equipment {
+					position: absolute;
+					top: 0;
+					left: 0;
+					transform: translate(-50%, -50%);
+					z-index: 2;
+					font-size: 40px;
+					// color: red;
+					// background: blue;
+					zoom: 1;
+				}
+			}
+
+			.shuaxin {
+				position: absolute;
+				z-index: 2;
+				font-size: 40px;
+				top: 20px;
+				left: 20px;
+				cursor: pointer;
+
+				&:hover {
+					color: yellowgreen;
+				}
+			}
+
+			.equipment {
+				color: white;
+			}
+
+			&/deep/.el-button {
+				z-index: 2;
+				position: absolute;
+				bottom: 60px;
+				right: 20px;
+				width: 60px;
+				height: 35px;
+
+				span {
+					display: inline-block;
+					position: absolute;
+					top: 50%;
+					left: 50%;
+					transform: translate(-50%, -50%);
+				}
+
+				i {
+					display: inline-block;
+					position: absolute;
+					top: 50%;
+					left: 25%;
+					transform: translate(-50%, -50%);
+				}
+			}
+		}
+	}
+
+	// body {
+	// 		height: 100%;
+	// 		overflow: hidden;
+	// 		margin: 0;
+	// 		padding: 0;
+	// 	}
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 3191 - 0
src/views/WindSite/components/generalappearance/xs/xs.vue


+ 14 - 5
src/views/WindSite/pages/GeneralAppearance.vue

@@ -18,6 +18,7 @@
           <img src="../../../assets/map/fan/black.png" />
           <span class="sub-title gray">接入台数</span>
           <span class="sub-count font-num white">{{wpnumMap.jrts}}</span>
+          
         </div>
         <div class="sub-title-item">
           <img src="../../../assets/map/fan/green.png" />
@@ -51,20 +52,25 @@
         </div>
       </div>
     </div>
-    <gax6 class="general-appearance-body"></gax6>
+    <!-- <gax6 class="general-appearance-body"></gax6> -->
+    <div>
+      <AppearanceXs class="general-appearance-body" :data="fjmap"/>
+    </div>
   </div>
 </template>
 
 <script>
 import BtnGroup2 from "@com/coms/btn/btn-group-double.vue";
-import gax6 from "../components/gax6.vue";
+// import gax6 from "../components/gax6.vue";
+import AppearanceXs from "../components/generalappearance/xs/xs.vue";
 export default {
   // 名称
   name: "GeneralAppearance",
   // 使用组件
   components: {
-    gax6,
+    // gax6,
     BtnGroup2,
+    AppearanceXs
   },
   // 数据
   data() {
@@ -72,6 +78,7 @@ export default {
       timmer: undefined,
       wpId: undefined, //场站
       wpnumMap: {}, //风机监视数量
+      fjmap: [], //场站风机详情
       selectIndex: 0,
       rowIndex: 0,
       btnGroups: [
@@ -91,7 +98,6 @@ export default {
     that.wpId = that.$route.params.wpId;
     that.$nextTick(() => {
       that.getWp();
-      that.requestData();
       that.timmer = setInterval(() => {
         that.requestData();
       }, that.$store.state.websocketTimeSec);
@@ -149,7 +155,10 @@ export default {
           wpId: that.wpId,
         },
         success(res) {
-          if (res.code == 200) that.wpnumMap = res.data.fczbmap.jczbmap;
+          if (res.code == 200) {
+            that.wpnumMap = res.data.fczbmap.jczbmap;
+            that.fjmap = res.data.fjmap[0];
+          }
         },
       });
     },

Файловите разлики са ограничени, защото са твърде много
+ 664 - 520
src/views/WindSite/pages/Map.vue


+ 246 - 0
src/views/powerCurve/index.vue

@@ -0,0 +1,246 @@
+<template>
+  <div class="draught-fan-list">
+    <div class="query mg-b-8">
+      <div class="query-items">
+        <div class="query-item">
+          <div class="lable">场站:</div>
+          <div class="search-input">
+            <el-select
+              v-model="wpId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+              @change="
+                (wpId) => {
+                  getWt(wpId, true);
+                }
+              "
+            >
+              <el-option
+                v-for="item in wpArray"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">风机:</div>
+          <div class="search-input">
+            <el-select
+              v-model="wtId"
+              clearable
+              placeholder="请选择"
+              popper-class="select"
+            >
+              <el-option
+                v-for="item in wtArray"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </div>
+        </div>
+        <div class="query-item">
+          <div class="lable">日期:</div>
+          <div class="search-input">
+            <el-date-picker
+              v-model="recorddate"
+              type="month"
+              value-format="YYYY-MM"
+              placeholder="选择日期"
+              popper-class="date-select"
+            >
+            </el-date-picker>
+          </div>
+        </div>
+      </div>
+      <div class="query-actions">
+        <button class="btn green" @click="search">搜索</button>
+      </div>
+    </div>
+    <ScatterLineChart
+      xTitle="风速)m/s("
+      yTitle="功率(kw)"
+      :height="'calc(100vh - 40px)'"
+      :lineData="chartLineData"
+      :data="chartData"
+    />
+  </div>
+</template>
+
+<script>
+import ScatterLineChart from "@com/chart/combination/scatter-line-chart.vue";
+export default {
+  // 名称
+  name: "cutAnalyse",
+
+  // 使用组件
+  components: {
+    ScatterLineChart,
+  },
+
+  // 数据
+  data() {
+    return {
+      isAsc: "asc",
+      wpArray: [],
+      wtArray: [],
+      wpId: "",
+      wtId: "",
+      recorddate: new Date(new Date().getTime() - 3600 * 1000 * 24).formatDate(
+        "yyyy-MM"
+      ),
+      chartLineData: {
+        xTitle: "风速",
+        yTitle: "功率",
+        legends: [],
+        data: [],
+      },
+      chartData: [
+        {
+          title: "",
+          value: [],
+        },
+      ],
+    };
+  },
+
+  // 函数
+  methods: {
+    // 获取风场
+    getWp(reGetWp) {
+      let that = this;
+      that.API.requestData({
+        method: "GET",
+        subUrl: "powercompare/windfarmAjax",
+        success(res) {
+          that.wpArray = res.data;
+          that.wpId = res.data[0].id;
+          that.getWt(that.wpId, reGetWp);
+        },
+      });
+    },
+
+    // 获取风机
+    getWt(wpid, reGetWp) {
+      let that = this;
+      if (that.wpId) {
+        that.API.requestData({
+          method: "GET",
+          baseURL: "http://10.155.32.4:9001",
+          subUrl: "benchmarking/wtList",
+          data: {
+            wpid,
+          },
+          success(res) {
+            that.wtArray = res.data;
+            that.wtId = res.data[0].id;
+            if (!reGetWp) {
+              that.getChartData();
+            }
+          },
+        });
+      }
+    },
+
+    // 获取图表数据
+    getChartData() {
+      let that = this;
+      that.API.requestData({
+        method: "POST",
+        subUrl: "scatter/scatterWtAjax",
+        data: {
+          wtId: that.wtId,
+          year: that.recorddate.split("-")[0],
+          month: that.recorddate.split("-")[1],
+        },
+        success(res) {
+          let chartLineData = {
+            xTitle: "风速",
+            yTitle: "功率",
+            legends: [],
+            data: [[], []],
+          };
+
+          res.data.line.forEach((ele) => {
+            chartLineData.data[0].push(ele[0]);
+            chartLineData.data[1].push(ele[1]);
+          });
+
+          let chartData = [
+            {
+              title: "功率曲线拟合",
+              value: res.data.scatter,
+            },
+          ];
+
+          that.chartLineData = chartLineData;
+          that.chartData = chartData;
+        },
+      });
+    },
+
+    search() {
+      if (!this.wpId || !this.wtId) {
+        this.BASE.showMsg({
+          msg: "场站与风机为必选项",
+        });
+      } else {
+        this.getChartData();
+      }
+    },
+  },
+
+  created() {
+    this.getWp();
+  },
+
+  mounted() {},
+
+  unmounted() {},
+};
+</script>
+
+<style lang="less" scoped>
+.draught-fan-list {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .btn-group-tabs {
+    display: flex;
+    flex-direction: row;
+
+    .photovoltaic {
+      margin-left: 1.481vh;
+    }
+  }
+
+  .df-table {
+    border: 0.093vh solid fade(@darkgray, 50%);
+    position: relative;
+    overflow: auto;
+    flex-grow: 1;
+    margin-top: 1.481vh;
+    height: 30vh;
+
+    &:before {
+      content: "";
+      width: 0.37vh;
+      height: 0.37vh;
+      background: @write;
+      position: absolute;
+      left: 0.278vh;
+      top: 0.278vh;
+    }
+
+    tbody {
+      height: calc(100vh - 166px);
+    }
+  }
+}
+</style>