Browse Source

完成场站性能分析和功率曲线分析页面,新增经济运行分析页面饼图文件

baiyanting 2 năm trước cách đây
mục cha
commit
0fae0792c9
22 tập tin đã thay đổi với 3270 bổ sung336 xóa
  1. 17 0
      src/api/monthlyPerformanceAnalysis.js
  2. 146 0
      src/components/chart/line/double-line-chart.vue
  3. 235 0
      src/components/chart/line/double-yAxis-line-chart.vue
  4. 190 0
      src/components/chart/pie/dual-pie-chart-econey.vue
  5. 48 0
      src/router/index.js
  6. 58 58
      src/views/layout/economicsOperation/analyse/monthlyAnalysis/index.vue
  7. 3 3
      src/views/layout/economicsOperation/analyse/standAloneAnalyse/index.vue
  8. 538 0
      src/views/layout/economicsOperation/analyse/stationAnalyse/index.vue
  9. 538 0
      src/views/layout/economicsOperation/analyse/stationAnalyse/indexFd.vue
  10. 1 1
      src/views/layout/economicsOperation/benchmarkingManagement/performanceRankingList/decision1Mx.vue
  11. 1 1
      src/views/layout/economicsOperation/benchmarkingManagement/performanceRankingList/index.vue
  12. 2 2
      src/views/layout/economicsOperation/homePage/components/barCharts.vue
  13. 263 249
      src/views/layout/economicsOperation/homePage/components/pieChart.vue
  14. 10 0
      src/views/layout/economicsOperation/index.vue
  15. 4 4
      src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/dayDetailInfo.vue
  16. 9 9
      src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/dayDetailInfoFd.vue
  17. 1 1
      src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/historyDetail.vue
  18. 4 4
      src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/index.vue
  19. 595 0
      src/views/layout/economicsOperation/powerCurve/powerLineAnalyse/index.vue
  20. 595 0
      src/views/layout/economicsOperation/powerCurve/powerLineAnalyse/indexFd.vue
  21. 6 2
      src/views/layout/economicsOperation/powerCurve/powerLinefitting/index.vue
  22. 6 2
      src/views/layout/economicsOperation/powerCurve/powerLinefitting/indexFd.vue

+ 17 - 0
src/api/monthlyPerformanceAnalysis.js

@@ -340,3 +340,20 @@ export function getApimaincenterlist(params) {
     method: "GET",
   });
 }
+// ------------------------------------------------------------场站性能分析------------------------------------------------------------------------
+
+export function getApiStationAnalyse(params) {
+  return request({
+    baseURL: process.env.VUE_APP_Economy,
+    url: `/economicsOperation/analyse/stationAnalyse?companys=${params.companys}&type=${params.type}&wpid=${params.wpid}&beginDate=${params.beginDate}&endDate=${params.endDate}`,
+    method: "GET",
+  });
+}
+// ------------------------------------------------------------功率曲线分析------------------------------------------------------------------------
+export function getApipowerAnalyse(params) {
+  return request({
+    baseURL: process.env.VUE_APP_Economy,
+    url: `economy/curvefitting?companys=${params.companys}&type=${params.type}&wpids=${params.wpids}&starttime=${params.starttime}&endtime=${params.endtime}&windturbineids=${params.windturbineids}&dateType=`,
+    method: "GET",
+  });
+}

+ 146 - 0
src/components/chart/line/double-line-chart.vue

@@ -0,0 +1,146 @@
+<template>
+  <div class="chart" :id="id"></div>
+</template>
+
+<script>
+import util from "@/helper/util.js";
+import * as echarts from "echarts";
+
+export default {
+  name: "double-yAxis-line-chart",
+  componentName: "double-yAxis-line-chart",
+  props: {
+    width: {
+      type: String,
+      default: "100%",
+    },
+    height: {
+      type: String,
+      default: "100%",
+    },
+    list: {
+      type: Array,
+      default: () => [],
+    },
+    tabEvent: { type: Number, default: -2 },
+    unit: {
+      type: String,
+      default: "(W/m²)",
+    },
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+    };
+  },
+  computed: {
+    name() {
+      if (this.tabEvent == -1) {
+        return "风速";
+      } else {
+        return "辐照度";
+      }
+    },
+  },
+  methods: {
+    initChart() {
+      let chart = echarts.init(this.$el);
+      let option = {
+        color: ["#1C99FF", "#FF8700"],
+        grid: {
+          top: 56,
+          left: 40,
+          right: 30,
+          bottom: 24,
+          containLabel: true,
+        },
+
+        xAxis: [
+          {
+            type: "category",
+            data: this.list[0]?.time,
+            axisTick: {
+              alignWithLabel: true,
+            },
+            axisPointer: {
+              type: "shadow",
+            },
+            axisLabel: {
+              color: "#b3b3b3",
+            },
+          },
+        ],
+        tooltip: {
+          trigger: "axis",
+        },
+        legend: {
+          top: "5%",
+          right: "5%",
+          icon: "circle",
+          itemWidth: 6,
+          data: this.list?.map((item) => item.name),
+          textStyle: {
+            color: "#b3b3b3",
+          },
+        },
+
+        yAxis: {
+          type: "value",
+          name: "kW",
+          nameTextStyle: {
+            color: "#b3b3b3",
+          },
+          axisLabel: {
+            color: "#b3b3b3",
+          },
+          splitLine: {
+            show: true,
+            lineStyle: {
+              color: "#2e3238",
+              type: "dashed",
+            },
+          },
+        },
+        series: this.list,
+      };
+
+      chart.clear();
+      chart && option && chart.setOption(option);
+      this.resize = function () {
+        chart.resize();
+      };
+      window.addEventListener("resize", this.resize);
+      chart.resize();
+    },
+  },
+  created() {
+    this.$nextTick(() => {
+      this.id = "line-chart-" + util.newGUID();
+    });
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.initChart();
+    });
+  },
+  updated() {
+    this.$nextTick(() => {
+      this.initChart();
+    });
+  },
+  unmounted() {
+    window.removeEventListener("resize", this.resize);
+  },
+};
+</script>
+
+<style lang="less">
+.chart {
+  width: 100%;
+  height: 100%;
+  display: inline-block;
+}
+</style>

+ 235 - 0
src/components/chart/line/double-yAxis-line-chart.vue

@@ -0,0 +1,235 @@
+<template>
+  <div class="chart" :id="id"></div>
+</template>
+
+<script>
+import util from "@/helper/util.js";
+import * as echarts from "echarts";
+
+export default {
+  name: "double-yAxis-line-chart",
+  componentName: "double-yAxis-line-chart",
+  props: {
+    width: {
+      type: String,
+      default: "100%",
+    },
+    height: {
+      type: String,
+      default: "100%",
+    },
+    list: {
+      type: Array,
+      default: () => [],
+    },
+    tabEvent: { type: Number, default: -2 },
+    unit: {
+      type: String,
+      default: "(W/m²)",
+    },
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+      newList: [],
+    };
+  },
+  watch: {
+    list: {
+      handler(val) {
+        if (val.length) {
+          this.newList = this.list;
+        } else {
+          this.newList = [];
+        }
+      },
+      immediate: true,
+    },
+  },
+  computed: {
+    name() {
+      if (this.tabEvent == -1) {
+        return "风速";
+      } else {
+        return "辐照度";
+      }
+    },
+    series() {
+      let series = [
+        {
+          name: "实际功率",
+          type: "line",
+          data: [],
+        },
+        {
+          name: "理论功率",
+          type: "line",
+          data: [],
+        },
+        {
+          name: this.name,
+          type: "line",
+          yAxisIndex: 1,
+          data: [],
+        },
+      ];
+      if (this.newList.length) {
+        series.forEach((item) => {
+          let a = this.newList.find((i) => i.name == item.name);
+          item.data = a?.data;
+        });
+      }
+      return series;
+    },
+  },
+  methods: {
+    initChart() {
+      let chart = echarts.init(this.$el);
+      let option = {
+        color: ["#1C99FF", "#3D54BE", "#FF8700"],
+        grid: {
+          top: 56,
+          left: 40,
+          right: 30,
+          bottom: 24,
+          containLabel: true,
+        },
+        tooltip: {
+          trigger: "axis",
+          //   axisPointer: {
+          //     type: "cross",
+          //     crossStyle: {
+          //       color: "#999",
+          //     },
+          //   },
+        },
+        xAxis: [
+          {
+            type: "category",
+            data: this.newList[0]?.time,
+            //  [
+            //   "00:00",
+            //   "00:15",
+            //   "00:30",
+            //   "00:45",
+            //   "01:00",
+            //   "01:15",
+            //   "01:30",
+            //   "01:45",
+            //   "02:00",
+            //   "02:15",
+            //   "02:30",
+            //   "02:45",
+            // ],
+            axisTick: {
+              alignWithLabel: true,
+            },
+            axisPointer: {
+              type: "shadow",
+            },
+            axisLabel: {
+              color: "#b3b3b3",
+            },
+          },
+        ],
+        yAxis: [
+          {
+            type: "value",
+            name: "功率(kW)",
+            nameTextStyle: {
+              color: "#b3b3b3",
+            },
+            axisLabel: {
+              color: "#b3b3b3",
+            },
+            splitLine: {
+              show: true,
+              lineStyle: {
+                color: "#2e3238",
+                type: "dashed",
+              },
+            },
+          },
+          {
+            type: "value",
+            name: this.name + this.unit,
+            nameTextStyle: {
+              color: "#b3b3b3",
+            },
+            axisLabel: {
+              color: "#b3b3b3",
+            },
+            splitLine: {
+              show: false,
+            },
+          },
+        ],
+        series: this.series,
+        // [
+        //   {
+        //     name: "实际功率",
+        //     type: "line",
+        //     data: [
+        //       2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4,
+        //       3.3,
+        //     ],
+        //   },
+        //   {
+        //     name: "理论功率",
+        //     type: "line",
+        //     data: [
+        //       2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0,
+        //       2.3,
+        //     ],
+        //   },
+        //   {
+        //     name: this.name,
+        //     type: "line",
+        //     yAxisIndex: 1,
+        //     data: [
+        //       2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2,
+        //     ],
+        //   },
+        // ],
+      };
+
+      chart.clear();
+      chart && option && chart.setOption(option);
+      this.resize = function () {
+        chart.resize();
+      };
+      window.addEventListener("resize", this.resize);
+      chart.resize();
+    },
+  },
+  created() {
+    this.$nextTick(() => {
+      this.id = "line-chart-" + util.newGUID();
+    });
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.initChart();
+    });
+  },
+  updated() {
+    this.$nextTick(() => {
+      this.initChart();
+    });
+  },
+  unmounted() {
+    window.removeEventListener("resize", this.resize);
+  },
+};
+</script>
+
+<style lang="less">
+.chart {
+  width: 100%;
+  height: 100%;
+  display: inline-block;
+}
+</style>

+ 190 - 0
src/components/chart/pie/dual-pie-chart-econey.vue

@@ -0,0 +1,190 @@
+<template>
+  <div class="chart" :id="id"></div>
+</template>
+
+<script>
+import util from "@/helper/util.js";
+import * as echarts from "echarts";
+
+export default {
+  name: "dsah-pie",
+  componentName: "dsah-pie",
+  props: {
+    width: {
+      type: String,
+      default: "100%",
+    },
+    height: {
+      type: String,
+      default: "18.519vh",
+    },
+    // 内部饼图数据
+    series: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+    };
+  },
+  computed: {},
+  methods: {
+    initChart() {
+      if (this.series.length) {
+        let max =
+          Math.max.apply(
+            Math,
+            this.series?.map(function (o) {
+              return o.children[0].value;
+            })
+          ) || 0;
+        let total =
+          this.series?.reduce((a, b) => {
+            return a + b.children[0].value * 1;
+          }, 0) || 0;
+        let titleItem =
+          this.series?.find((item) => item.children[0].value == max) || {};
+        let option = {
+          animation: true,
+          title: {
+            text: `{val|${
+              max && total ? Number((max / total) * 100).toFixed(2) : 0
+            }%}\n\n{name|${titleItem?.name || ""}}`,
+            top: "center",
+            left: "48%",
+            textAlign: "center",
+            textStyle: {
+              rich: {
+                name: {
+                  fontSize: 13,
+                  fontWeight: "bold",
+                  color: "#b3b3b3",
+                },
+                val: {
+                  fontSize: 15,
+                  fontWeight: "bold",
+                  color: "#b3b3b3",
+                },
+              },
+            },
+          },
+          series: [
+            {
+              type: "sunburst",
+              data: this.series,
+              radius: [0, "95%"],
+              sort: null,
+              emphasis: {
+                focus: "ancestor",
+              },
+              levels: [
+                {},
+                {
+                  r0: "55%",
+                  r: "80%",
+                  itemStyle: {
+                    borderWidth: 0,
+                  },
+                },
+                {
+                  r0: "80%",
+                  r: "70%",
+                  itemStyle: {
+                    borderWidth: 0,
+                  },
+                },
+                {
+                  r0: "55%",
+                  r: "55%",
+                  itemStyle: {
+                    borderWidth: 0,
+                    // borderWidth: 1
+                  },
+                },
+              ],
+              label: {
+                show: false,
+              },
+            },
+          ],
+        };
+        this.chart.on("mouseover", (event) => {
+          let value = Number((event.value / total) * 100).toFixed(2);
+          option.title.text =
+            "{val|" + value + "%}\n\n{name|" + event?.name + "}";
+          option.animation = false;
+          option.title.textStyle = {
+            rich: {
+              name: {
+                fontSize: 13,
+                fontWeight: "bold",
+                color: "#b3b3b3",
+              },
+              val: {
+                fontSize: 15,
+                fontWeight: "bold",
+                color: "#b3b3b3",
+              },
+            },
+          };
+          this.chart.setOption(option);
+        });
+        this.chart.on("mouseout", (event) => {
+          option.animation = false;
+          option.title = {
+            text: `{val|${
+              max && total ? Number((max / total) * 100).toFixed(2) : 0
+            }%}\n\n{name|${titleItem?.name || ""}}`,
+            top: "center",
+            left: "48%",
+            textAlign: "center",
+            textStyle: {
+              rich: {
+                name: {
+                  fontSize: 13,
+                  fontWeight: "bold",
+                  color: "#b3b3b3",
+                },
+                val: {
+                  fontSize: 15,
+                  fontWeight: "bold",
+                  color: "#b3b3b3",
+                },
+              },
+            },
+          };
+          this.chart.setOption(option);
+        });
+
+        this.chart.setOption(option);
+      }
+    },
+  },
+  created() {
+    this.id = "pie-chart-" + util.newGUID();
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.chart = echarts.init(this.$el);
+      this.initChart();
+    });
+  },
+  updated() {
+    this.initChart();
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.chart {
+  width: 100%;
+  height: 100%;
+  display: block;
+  margin: auto;
+}
+</style>

+ 48 - 0
src/router/index.js

@@ -732,6 +732,30 @@ export const asyncRoutes = [
             },
           },
           {
+            path: "stationAnalyse",
+            component: () =>
+              import(
+                "@/views/layout/economicsOperation/analyse/stationAnalyse"
+              ),
+            name: "stationAnalyse",
+            meta: {
+              title: "场站性能分析",
+              icon: "",
+            },
+          },
+          {
+            path: "stationAnalyseFd",
+            component: () =>
+              import(
+                "@/views/layout/economicsOperation/analyse/stationAnalyse/indexFd.vue"
+              ),
+            name: "stationAnalyseFd",
+            meta: {
+              title: "场站性能分析",
+              icon: "",
+            },
+          },
+          {
             path: "monthlyAnalysis",
             component: () =>
               import(
@@ -780,6 +804,30 @@ export const asyncRoutes = [
             },
           },
           {
+            path: "powerLineAnalyse",
+            component: () =>
+              import(
+                "@/views/layout/economicsOperation/powerCurve/powerLineAnalyse"
+              ),
+            name: "powerLineAnalyse",
+            meta: {
+              title: "功率曲线分析",
+              icon: "",
+            },
+          },
+          {
+            path: "powerLineAnalyseFd",
+            component: () =>
+              import(
+                "@/views/layout/economicsOperation/powerCurve/powerLineAnalyse/indexFd.vue"
+              ),
+            name: "powerLineAnalyseFd",
+            meta: {
+              title: "功率曲线分析",
+              icon: "",
+            },
+          },
+          {
             path: "cutInAndOutAnalysis",
             component: () =>
               import(

+ 58 - 58
src/views/layout/economicsOperation/analyse/monthlyAnalysis/index.vue

@@ -2,16 +2,16 @@
   <div class="monthMachine">
     <div class="monthMachine_top">
       <el-select
-          size="mini"
-          v-model="companyVal"
-          placeholder="请选择"
-          @change="changeCompan"
+        size="mini"
+        v-model="companyVal"
+        placeholder="请选择"
+        @change="changeCompan"
       >
         <el-option
-            v-for="item in companyOptions"
-            :key="item.id"
-            :label="item.aname"
-            :value="item.id"
+          v-for="item in companyOptions"
+          :key="item.id"
+          :label="item.aname"
+          :value="item.id"
         >
         </el-option>
       </el-select>
@@ -28,17 +28,17 @@
       <div class="station">
         场站:
         <el-select
-            size="mini"
-            v-model="stationVal"
-            placeholder="请选择"
-            clearable
-            @change="changeStation"
+          size="mini"
+          v-model="stationVal"
+          placeholder="请选择"
+          clearable
+          @change="changeStation"
         >
           <el-option
-              v-for="item in stationOptions"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
+            v-for="item in stationOptions"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
           >
           </el-option>
         </el-select>
@@ -47,21 +47,21 @@
         时间
         <div class="search-input">
           <el-date-picker
-              v-model="pickerTimer"
-              type="month"
-              value-format="YYYY-MM"
-              placeholder="选择日期"
-              popper-class="date-select"
+            v-model="pickerTimer"
+            type="month"
+            value-format="YYYY-MM"
+            placeholder="选择日期"
+            popper-class="date-select"
           >
           </el-date-picker>
         </div>
       </div>
       <div class="but">
         <el-button round size="mini" class="buttons" @click="seachData"
-        >搜索</el-button
+          >搜索</el-button
         >
         <el-button round size="mini" class="buttons" @click="downXlsxFn"
-        >导出</el-button
+          >导出</el-button
         >
       </div>
     </div>
@@ -72,29 +72,29 @@
       </div>
       <div class="monthMachine_Table">
         <el-table
-            :data="monthMachineData"
-            stripe
-            size="mini"
-            height="75vh"
-            ref="month_table"
-            style="width: 100%"
+          :data="monthMachineData"
+          stripe
+          size="mini"
+          height="75vh"
+          ref="month_table"
+          style="width: 100%"
         >
           <el-table-column align="center" label="机组名称" width="170">
             <template #default="scope">
               <span
-                  @click="reportDialogFn(scope.row)"
-                  style="cursor: pointer; color: #0d84ff"
-              >{{ scope.row.windturbineName }}</span
+                @click="reportDialogFn(scope.row)"
+                style="cursor: pointer; color: #0d84ff"
+                >{{ scope.row.windturbineName }}</span
               >
             </template>
           </el-table-column>
           <el-table-column
-              v-for="(item, index) in tableHeader"
-              :key="index"
-              sortable
-              :prop="item.code"
-              :label="item.title"
-              align="center"
+            v-for="(item, index) in tableHeader"
+            :key="index"
+            sortable
+            :prop="item.code"
+            :label="item.title"
+            align="center"
           >
             <template #header="scope">
               <div>
@@ -109,21 +109,21 @@
           </el-table-column>
         </el-table>
         <el-pagination
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-            :current-page="page.currentPage"
-            :page-size="page.pagesize"
-            layout="total, prev, pager, next, jumper"
-            :total="page.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="page.currentPage"
+          :page-size="page.pagesize"
+          layout="total, prev, pager, next, jumper"
+          :total="page.total"
         >
         </el-pagination>
       </div>
     </div>
     <el-dialog
-        v-model="dialogVisible"
-        width="70%"
-        custom-class="modal"
-        :close-on-click-modal="false"
+      v-model="dialogVisible"
+      width="70%"
+      custom-class="modal"
+      :close-on-click-modal="false"
     >
       <!-- <template #title>
                 <div class="dialogHeader">
@@ -188,7 +188,7 @@ export default {
         { title: "理论发电量(万kWh)", code: "llfdl" },
         { title: "设备利用小时数(小时)", code: "lyxs" },
         { title: "等效可用系数(%)", code: "dxklyxs" },
-        { title: "平均照度(m/s)", code: "fs" },
+        { title: "平均照度(m/s)", code: "fs" },
         { title: "有效光时数(小时)", code: "yxfss" },
         { title: "故障损失电量(万kWh)", code: "gzss" },
         { title: "调度限电损失(万kWh)", code: "xdss" },
@@ -211,7 +211,7 @@ export default {
   },
   created() {
     const clientHeight =
-        document.documentElement.clientHeight || document.body.clientHeight;
+      document.documentElement.clientHeight || document.body.clientHeight;
     if (clientHeight === 1080) {
       this.isFullScreen = true;
     } else {
@@ -222,7 +222,7 @@ export default {
   mounted() {
     window.onresize = () => {
       const clientHeight =
-          document.documentElement.clientHeight || document.body.clientHeight;
+        document.documentElement.clientHeight || document.body.clientHeight;
       this.isFullScreen = window.screen.height == clientHeight;
       this.getTableData();
     };
@@ -302,11 +302,11 @@ export default {
       this.dialogVisible = true;
       this.dialogTitle = row.wtcode;
       this.pickerTimerYear = this.pickerTimer.substring(
-          0,
-          this.pickerTimer.indexOf("-")
+        0,
+        this.pickerTimer.indexOf("-")
       );
       this.pickerTimerMonth = this.pickerTimer.substring(
-          this.pickerTimer.indexOf("-") + 1
+        this.pickerTimer.indexOf("-") + 1
       );
       this.$nextTick(() => {
         this.$refs.reportDia.pickerTimerYear = this.pickerTimerYear;
@@ -324,9 +324,9 @@ export default {
       });
       if (this.monthMachineData.length > 0) {
         utils.exportExcel(
-            this.$refs["month_table"].$el,
-            header,
-            "单机月度分析"
+          this.$refs["month_table"].$el,
+          header,
+          "单机月度分析"
         );
       }
     },

+ 3 - 3
src/views/layout/economicsOperation/analyse/standAloneAnalyse/index.vue

@@ -184,17 +184,17 @@ export default {
         { title: "型号", code: "model" },
         { title: "日系统效率", code: "rxtxl" },
         { title: "日拟合优度(%)", code: "rlsl" },
-        { title: "日照(W/m²)", code: "rzhxl" },
+        { title: "日照(W/m²)", code: "rzhxl" },
         // { title: "日离散率", code: "rlsl" },
         // { title: "日转换效率", code: "rzhxl" },
         { title: "月系统效率", code: "yxtxl" },
         { title: "月拟合优度(%)", code: "ylsl" },
-        { title: "月照(W/m²)", code: "yzhxl" },
+        { title: "月照(W/m²)", code: "yzhxl" },
         // { title: "月离散率", code: "ylsl" },
         // { title: "月转换效率", code: "yzhxl" },
         { title: "年系统效率", code: "nxtxl" },
         { title: "年拟合优度(%)", code: "nlsl" },
-        { title: "年照(W/m²)", code: "nzhxl" },
+        { title: "年照(W/m²)", code: "nzhxl" },
         // { title: "年离散率", code: "nlsl" },
         // { title: "年转换效率", code: "nzhxl" },
         { title: "操作" },

+ 538 - 0
src/views/layout/economicsOperation/analyse/stationAnalyse/index.vue

@@ -0,0 +1,538 @@
+<template>
+  <div class="powerLinefitting">
+    <div class="powerLinefitting_topAll">
+      <div class="powerLinefitting_top">
+        <div class="form-wrapper">
+          <div class="select-wrapper">
+            <el-select
+              size="mini"
+              v-model="tabEvent"
+              placeholder="请选择"
+              @change="changeBtn"
+            >
+              <el-option
+                v-for="item in tabOptions"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="companyVal"
+              placeholder="请选择"
+              @change="changeCompan"
+            >
+              <el-option
+                v-for="item in companyOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="stationVal"
+              placeholder="请选择"
+              clearable
+              @change="changeStation"
+            >
+              <el-option
+                v-for="item in stationOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="date-wrapper">
+            <div class="date-item-wrapper">
+              开始时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="starTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+            <div class="date-item-wrapper">
+              结束时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="endTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="getTableData"
+            >查询</el-button
+          >
+          <el-button round size="mini" class="buttons" @click="downXlsxFn"
+            >导出</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div style="background: rgba(0, 0, 0, 0.4)">
+      <div class="powerLinefitting_title clearfix">
+        <div class="leftContent floatLeft"><span>场站性能分析</span></div>
+        <div class="rightContent floatRight"></div>
+      </div>
+
+      <div class="powerLinefitting_Table">
+        <el-table
+          :data="stationAnalyseData"
+          stripe
+          size="mini"
+          height="48vh"
+          ref="fitting_table"
+          style="width: 100%"
+        >
+          <el-table-column
+            v-for="(item, index) in tableHeader"
+            :key="index"
+            sortable
+            :prop="item.code"
+            :label="item.title"
+            align="center"
+          >
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="powerLinefitting_Echarts">
+      <div class="chart-name">
+        <div class="point left bottom"></div>
+        <div class="point right bottom"></div>
+        <span>性能分析曲线</span>
+      </div>
+      <div class="fittingEchartSty">
+        <doubleYAxisLineChart
+          :tabEvent="tabEvent"
+          :unit="'(W/m²)'"
+          :list="stationLineData"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getApiStationAnalyse } from "@/api/monthlyPerformanceAnalysis";
+import { GetOrganization, GetStationByCompany } from "@/api/headerNav.js";
+import utils from "@/utils/downXlsx";
+import dayjs from "dayjs";
+import doubleYAxisLineChart from "@/components/chart/line/double-yAxis-line-chart.vue";
+export default {
+  name: "stationAnalyse", //场站性能分析
+  data() {
+    return {
+      companyVal: "",
+      companyOptions: [],
+      stationVal: "",
+      stationOptions: [],
+      starTime: "",
+      endTime: "",
+      stationAnalyseData: [],
+      stationLineData: [],
+      tableHeader: [
+        { title: "场站", code: "stationName" },
+        { title: "时间", code: "time" },
+        { title: "辐照度", code: "irradiance" },
+        { title: "实际功率", code: "actualPower" },
+        { title: "理论功率", code: "theoreticalPower" },
+      ],
+      tabEvent: -2,
+      tabOptions: [
+        { id: -1, name: "风电" },
+        { id: -2, name: "光伏" },
+      ],
+    };
+  },
+  components: {
+    doubleYAxisLineChart,
+  },
+  created() {
+    this.starTime = dayjs().startOf("day").format("YYYY-MM-DD HH:mm:ss");
+    this.endTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
+    this.getCompanyData();
+  },
+  methods: {
+    //切换风电光伏
+    changeBtn() {
+      this.$router.push({
+        path: "/economicsOperation/analyse/stationAnalyseFd",
+      });
+    },
+    // 获取公司列表
+    async getCompanyData() {
+      this.companyOptions = [];
+      const datas = await GetOrganization({ type: this.tabEvent });
+      this.companyOptions = datas.data;
+      this.companyVal = datas.data[0]?.id;
+      this.getStationData(this.companyVal);
+    },
+    // 获取场站列表
+    async getStationData() {
+      this.stationOptions = [];
+      let params = {
+        type: this.tabEvent,
+        companyids: this.companyVal,
+      };
+      const datas = await GetStationByCompany(params);
+      this.stationOptions = datas.data;
+      this.stationVal = datas.data[0].id;
+      this.getTableData();
+    },
+    //切换公司
+    changeCompan(val) {
+      this.companyVal = val;
+      this.getStationData();
+    },
+    //切换场站
+    changeStation(val) {
+      this.stationVal = val;
+      this.getTableData();
+    },
+    async getTableData() {
+      let params = {
+        wpid: this.stationVal,
+        type: this.tabEvent,
+        companys: this.companyVal,
+        beginDate: this.starTime,
+        endDate: this.endTime,
+      };
+      const { data } = await getApiStationAnalyse(params);
+      this.stationAnalyseData = data.list.map((item) => {
+        return {
+          ...item,
+          actualPower: item.actualPower.toFixed(2),
+          theoreticalPower: item.theoreticalPower.toFixed(2),
+          irradiance: item.irradiance.toFixed(2),
+          time: dayjs(item.time).format("YYYY-MM-DD HH:mm:ss"),
+        };
+      });
+      this.stationLineData = [
+        {
+          name: "实际功率",
+          data: data.chanrt.map((item) => item.actualPower.toFixed(2)),
+          time: data.chanrt.map((item) =>
+            dayjs(item.time).format("YYYY-MM-DD HH:mm:ss")
+          ),
+        },
+        {
+          name: "理论功率",
+          data: data.chanrt.map((item) => item.theoreticalPower.toFixed(2)),
+        },
+        {
+          name: "辐照度",
+          data: data.chanrt.map((item) => item.irradiance.toFixed(2)),
+        },
+      ];
+    },
+    downXlsxFn() {
+      let header = [];
+      this.tableHeader.forEach((it) => {
+        header.push(it.title);
+      });
+      utils.exportExcel(
+        this.$refs["fitting_table"].$el,
+        header,
+        "场站性能分析"
+      );
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.powerLinefitting {
+  padding: 0 23px;
+  .powerLinefitting_topAll {
+    display: flex;
+    justify-content: space-between;
+    .powerLinefitting_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      margin-top: 10px;
+      margin-bottom: 10px;
+      .form-wrapper {
+        display: flex;
+        align-items: center;
+        .select-wrapper {
+          display: flex;
+          align-items: center;
+          .el-select {
+            width: 155px;
+            .el-input .el-input__inner {
+              width: 150px;
+            }
+          }
+        }
+        .date-wrapper {
+          display: flex;
+          align-items: center;
+          font-size: 14px;
+          font-family: Microsoft YaHei;
+          font-weight: 400;
+          color: #b3b3b3;
+          margin-left: 10px;
+          .date-item-wrapper {
+            display: flex;
+            align-items: center;
+            margin-right: 15px;
+            .date-item-date {
+              margin-left: 10px;
+              .el-input .el-input__inner {
+                font-size: 13px;
+                color: #b3b3b3;
+              }
+            }
+          }
+        }
+      }
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 25px;
+      }
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        .buttons:nth-child(1) {
+          background: rgba(0, 70, 199, 0.6);
+          border: 1px solid #1f51ae;
+          border-radius: 13px;
+          color: #fff;
+          &:hover {
+            background: rgba(14, 90, 229, 0.9);
+            border-radius: 13px;
+            color: #fff;
+          }
+        }
+        .buttons:nth-child(2) {
+          background: rgba(67, 81, 107, 0.3);
+          border: 1px solid #3b4c6c;
+          border-radius: 13px;
+          font-size: 14px;
+          color: #b3b3b3;
+        }
+      }
+    }
+    .selections {
+      display: flex;
+      margin-top: 10px;
+      position: relative;
+      right: 120px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #fff;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#0046c7, 80);
+          border: 1px solid #0046c7;
+          color: #b9b9b9;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .powerLinefitting_title {
+    padding-left: 10px;
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      background: url("../../../../../assets/imgs/title_left_bg.png");
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #ffffff;
+        margin-left: 25px;
+      }
+    }
+    .floatLeft {
+      float: left;
+    }
+    .floatRight {
+      float: right;
+    }
+    .rightContent {
+      width: 212px;
+      height: 28px;
+      margin-top: 13px;
+      background: url("../../../../../assets/imgs/title_right_bg.png");
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+
+  .powerLinefitting_Table {
+    margin: 0 5px 5px 5px;
+    padding-bottom: 10px;
+    .el-table--mini {
+      margin: 5px;
+      .el-table__header-wrapper {
+        tr {
+          background: rgba(83, 89, 104, 0.3) !important;
+          th {
+            vertical-align: top !important;
+          }
+          .cell {
+            color: #b3b3b3;
+            font-family: MicrosoftYaHei;
+            font-size: 14px;
+          }
+        }
+      }
+      .el-table__body-wrapper {
+        tr {
+          &:nth-child(2n) {
+            background: rgba(83, 89, 104, 0.05) !important;
+          }
+          .cell {
+            color: #d8d8d9;
+            font-family: ArialMT;
+            font-size: 13px;
+            height: 25px !important;
+          }
+        }
+      }
+    }
+    .historyBtn {
+      background: #43516b;
+      border-radius: 15px;
+      margin-top: 5px;
+      border: 1px solid #43516b;
+      span {
+        color: #fff;
+      }
+    }
+  }
+  .powerLinefitting_Echarts {
+    margin-top: 10px;
+    width: 100%;
+    background: rgba(0, 0, 0, 0.45);
+    position: relative;
+    height: 39px;
+    // border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+    font-size: 16px;
+    font-family: Microsoft YaHei;
+    font-weight: 400;
+    color: #ffffff;
+    .chart-name {
+      display: flex;
+      align-items: center;
+      padding-left: 20px;
+      position: relative;
+      height: 39px;
+      width: 98%;
+      margin-left: 1%;
+      border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #ffffff;
+      .point {
+        width: 6px;
+        height: 1px;
+        background-color: #ffffff;
+        position: absolute;
+
+        &.left {
+          left: 0;
+        }
+
+        &.right {
+          right: 0;
+        }
+
+        &.top {
+          top: -1px;
+        }
+
+        &.bottom {
+          bottom: -1px;
+        }
+      }
+    }
+    .fittingEchartSty {
+      width: 100%;
+      height: 280px;
+      background: rgba(0, 0, 0, 0.45);
+    }
+  }
+  .el-overlay {
+    .el-overlay-dialog {
+      overflow-y: hidden !important;
+      .powerLinefittinghistoryModel {
+        margin-top: 0 !important;
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+      .contrastModal {
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+    }
+  }
+
+  .el-picker__popper .el-date-range-picker__header .el-picker-panel__icon-btn {
+    color: #fff;
+  }
+  .el-picker__popper .el-date-table .in-range div {
+    background: #43516b;
+  }
+}
+</style>

+ 538 - 0
src/views/layout/economicsOperation/analyse/stationAnalyse/indexFd.vue

@@ -0,0 +1,538 @@
+<template>
+  <div class="powerLinefitting">
+    <div class="powerLinefitting_topAll">
+      <div class="powerLinefitting_top">
+        <div class="form-wrapper">
+          <div class="select-wrapper">
+            <el-select
+              size="mini"
+              v-model="tabEvent"
+              placeholder="请选择"
+              @change="changeBtn"
+            >
+              <el-option
+                v-for="item in tabOptions"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="companyVal"
+              placeholder="请选择"
+              @change="changeCompan"
+            >
+              <el-option
+                v-for="item in companyOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="stationVal"
+              placeholder="请选择"
+              clearable
+              @change="changeStation"
+            >
+              <el-option
+                v-for="item in stationOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="date-wrapper">
+            <div class="date-item-wrapper">
+              开始时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="starTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+            <div class="date-item-wrapper">
+              结束时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="endTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="getTableData"
+            >查询</el-button
+          >
+          <el-button round size="mini" class="buttons" @click="downXlsxFn"
+            >导出</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div style="background: rgba(0, 0, 0, 0.4)">
+      <div class="powerLinefitting_title clearfix">
+        <div class="leftContent floatLeft"><span>场站性能分析</span></div>
+        <div class="rightContent floatRight"></div>
+      </div>
+
+      <div class="powerLinefitting_Table">
+        <el-table
+          :data="stationAnalyseData"
+          stripe
+          size="mini"
+          height="48vh"
+          ref="fitting_table"
+          style="width: 100%"
+        >
+          <el-table-column
+            v-for="(item, index) in tableHeader"
+            :key="index"
+            sortable
+            :prop="item.code"
+            :label="item.title"
+            align="center"
+          >
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="powerLinefitting_Echarts">
+      <div class="chart-name">
+        <div class="point left bottom"></div>
+        <div class="point right bottom"></div>
+        <span>性能分析曲线</span>
+      </div>
+      <div class="fittingEchartSty">
+        <doubleYAxisLineChart
+          :tabEvent="tabEvent"
+          :unit="'(m/s)'"
+          :list="stationLineData"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getApiStationAnalyse } from "@/api/monthlyPerformanceAnalysis";
+import { GetOrganization, GetStationByCompany } from "@/api/headerNav.js";
+import utils from "@/utils/downXlsx";
+import dayjs from "dayjs";
+import doubleYAxisLineChart from "@/components/chart/line/double-yAxis-line-chart.vue";
+export default {
+  name: "stationAnalyse", //场站性能分析
+  data() {
+    return {
+      companyVal: "",
+      companyOptions: [],
+      stationVal: "",
+      stationOptions: [],
+      starTime: "",
+      endTime: "",
+      stationAnalyseData: [],
+      stationLineData: [],
+      tableHeader: [
+        { title: "场站", code: "stationName" },
+        { title: "时间", code: "time" },
+        { title: "风速", code: "irradiance" },
+        { title: "实际功率", code: "actualPower" },
+        { title: "理论功率", code: "theoreticalPower" },
+      ],
+      tabEvent: -1,
+      tabOptions: [
+        { id: -1, name: "风电" },
+        { id: -2, name: "光伏" },
+      ],
+    };
+  },
+  components: {
+    doubleYAxisLineChart,
+  },
+  created() {
+    this.starTime = dayjs().startOf("day").format("YYYY-MM-DD HH:mm:ss");
+    this.endTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
+    this.getCompanyData();
+  },
+  methods: {
+    //切换风电光伏
+    changeBtn() {
+      this.$router.push({
+        path: "/economicsOperation/analyse/stationAnalyse",
+      });
+    },
+    // 获取公司列表
+    async getCompanyData() {
+      this.companyOptions = [];
+      const datas = await GetOrganization({ type: this.tabEvent });
+      this.companyOptions = datas.data;
+      this.companyVal = datas.data[0]?.id;
+      this.getStationData(this.companyVal);
+    },
+    // 获取场站列表
+    async getStationData() {
+      this.stationOptions = [];
+      let params = {
+        type: this.tabEvent,
+        companyids: this.companyVal,
+      };
+      const datas = await GetStationByCompany(params);
+      this.stationOptions = datas.data;
+      this.stationVal = datas.data[0].id;
+      this.getTableData();
+    },
+    //切换公司
+    changeCompan(val) {
+      this.companyVal = val;
+      this.getStationData();
+    },
+    //切换场站
+    changeStation(val) {
+      this.stationVal = val;
+      this.getTableData();
+    },
+    async getTableData() {
+      let params = {
+        wpid: this.stationVal,
+        type: this.tabEvent,
+        companys: this.companyVal,
+        beginDate: this.starTime,
+        endDate: this.endTime,
+      };
+      const { data } = await getApiStationAnalyse(params);
+      this.stationAnalyseData = data.list.map((item) => {
+        return {
+          ...item,
+          actualPower: item.actualPower.toFixed(2),
+          theoreticalPower: item.theoreticalPower.toFixed(2),
+          irradiance: item.irradiance.toFixed(2),
+          time: dayjs(item.time).format("YYYY-MM-DD HH:mm:ss"),
+        };
+      });
+      this.stationLineData = [
+        {
+          name: "实际功率",
+          data: data.chanrt.map((item) => item.actualPower.toFixed(2)),
+          time: data.chanrt.map((item) =>
+            dayjs(item.time).format("YYYY-MM-DD HH:mm:ss")
+          ),
+        },
+        {
+          name: "理论功率",
+          data: data.chanrt.map((item) => item.theoreticalPower.toFixed(2)),
+        },
+        {
+          name: "风速",
+          data: data.chanrt.map((item) => item.irradiance.toFixed(2)),
+        },
+      ];
+    },
+    downXlsxFn() {
+      let header = [];
+      this.tableHeader.forEach((it) => {
+        header.push(it.title);
+      });
+      utils.exportExcel(
+        this.$refs["fitting_table"].$el,
+        header,
+        "场站性能分析"
+      );
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.powerLinefitting {
+  padding: 0 23px;
+  .powerLinefitting_topAll {
+    display: flex;
+    justify-content: space-between;
+    .powerLinefitting_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      margin-top: 10px;
+      margin-bottom: 10px;
+      .form-wrapper {
+        display: flex;
+        align-items: center;
+        .select-wrapper {
+          display: flex;
+          align-items: center;
+          .el-select {
+            width: 155px;
+            .el-input .el-input__inner {
+              width: 150px;
+            }
+          }
+        }
+        .date-wrapper {
+          display: flex;
+          align-items: center;
+          font-size: 14px;
+          font-family: Microsoft YaHei;
+          font-weight: 400;
+          color: #b3b3b3;
+          margin-left: 10px;
+          .date-item-wrapper {
+            display: flex;
+            align-items: center;
+            margin-right: 15px;
+            .date-item-date {
+              margin-left: 10px;
+              .el-input .el-input__inner {
+                font-size: 13px;
+                color: #b3b3b3;
+              }
+            }
+          }
+        }
+      }
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 25px;
+      }
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        .buttons:nth-child(1) {
+          background: rgba(0, 70, 199, 0.6);
+          border: 1px solid #1f51ae;
+          border-radius: 13px;
+          color: #fff;
+          &:hover {
+            background: rgba(14, 90, 229, 0.9);
+            border-radius: 13px;
+            color: #fff;
+          }
+        }
+        .buttons:nth-child(2) {
+          background: rgba(67, 81, 107, 0.3);
+          border: 1px solid #3b4c6c;
+          border-radius: 13px;
+          font-size: 14px;
+          color: #b3b3b3;
+        }
+      }
+    }
+    .selections {
+      display: flex;
+      margin-top: 10px;
+      position: relative;
+      right: 120px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #fff;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#0046c7, 80);
+          border: 1px solid #0046c7;
+          color: #b9b9b9;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .powerLinefitting_title {
+    padding-left: 10px;
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      background: url("../../../../../assets/imgs/title_left_bg.png");
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #ffffff;
+        margin-left: 25px;
+      }
+    }
+    .floatLeft {
+      float: left;
+    }
+    .floatRight {
+      float: right;
+    }
+    .rightContent {
+      width: 212px;
+      height: 28px;
+      margin-top: 13px;
+      background: url("../../../../../assets/imgs/title_right_bg.png");
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+
+  .powerLinefitting_Table {
+    margin: 0 5px 5px 5px;
+    padding-bottom: 10px;
+    .el-table--mini {
+      margin: 5px;
+      .el-table__header-wrapper {
+        tr {
+          background: rgba(83, 89, 104, 0.3) !important;
+          th {
+            vertical-align: top !important;
+          }
+          .cell {
+            color: #b3b3b3;
+            font-family: MicrosoftYaHei;
+            font-size: 14px;
+          }
+        }
+      }
+      .el-table__body-wrapper {
+        tr {
+          &:nth-child(2n) {
+            background: rgba(83, 89, 104, 0.05) !important;
+          }
+          .cell {
+            color: #d8d8d9;
+            font-family: ArialMT;
+            font-size: 13px;
+            height: 25px !important;
+          }
+        }
+      }
+    }
+    .historyBtn {
+      background: #43516b;
+      border-radius: 15px;
+      margin-top: 5px;
+      border: 1px solid #43516b;
+      span {
+        color: #fff;
+      }
+    }
+  }
+  .powerLinefitting_Echarts {
+    margin-top: 10px;
+    width: 100%;
+    background: rgba(0, 0, 0, 0.45);
+    position: relative;
+    height: 39px;
+    // border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+    font-size: 16px;
+    font-family: Microsoft YaHei;
+    font-weight: 400;
+    color: #ffffff;
+    .chart-name {
+      display: flex;
+      align-items: center;
+      padding-left: 20px;
+      position: relative;
+      height: 39px;
+      width: 98%;
+      margin-left: 1%;
+      border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #ffffff;
+      .point {
+        width: 6px;
+        height: 1px;
+        background-color: #ffffff;
+        position: absolute;
+
+        &.left {
+          left: 0;
+        }
+
+        &.right {
+          right: 0;
+        }
+
+        &.top {
+          top: -1px;
+        }
+
+        &.bottom {
+          bottom: -1px;
+        }
+      }
+    }
+    .fittingEchartSty {
+      width: 100%;
+      height: 280px;
+      background: rgba(0, 0, 0, 0.45);
+    }
+  }
+  .el-overlay {
+    .el-overlay-dialog {
+      overflow-y: hidden !important;
+      .powerLinefittinghistoryModel {
+        margin-top: 0 !important;
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+      .contrastModal {
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+    }
+  }
+
+  .el-picker__popper .el-date-range-picker__header .el-picker-panel__icon-btn {
+    color: #fff;
+  }
+  .el-picker__popper .el-date-table .in-range div {
+    background: #43516b;
+  }
+}
+</style>

+ 1 - 1
src/views/layout/economicsOperation/benchmarkingManagement/performanceRankingList/decision1Mx.vue

@@ -165,7 +165,7 @@
           <el-table-column
             align="center"
             prop="speed"
-            :label="tabIndex === -1 ? '风速' : '照'"
+            :label="tabIndex === -1 ? '风速' : '照'"
           >
           </el-table-column>
           <el-table-column align="center" prop="fjhjx1" label="故障损失">

+ 1 - 1
src/views/layout/economicsOperation/benchmarkingManagement/performanceRankingList/index.vue

@@ -166,7 +166,7 @@
           <el-table-column
             align="center"
             prop="speed"
-            :label="tabIndex === -1 ? '风速' : '照'"
+            :label="tabIndex === -1 ? '风速' : '照'"
           >
           </el-table-column>
           <el-table-column align="center" prop="fjhjx" label="故障">

+ 2 - 2
src/views/layout/economicsOperation/homePage/components/barCharts.vue

@@ -25,7 +25,7 @@ export default {
         },
         top: {
             type: Number,
-            default: 20,
+            default: 30,
         },
         interval: {
             type: Number,
@@ -244,7 +244,7 @@ export default {
         // 单位
         units: {
             type: Array,
-            default: () => ["(万KWh)", "(风速)"],
+            default: () => ["(万KWh)"],
         },
         // 显示 legend
         showLegend: {

+ 263 - 249
src/views/layout/economicsOperation/homePage/components/pieChart.vue

@@ -1,277 +1,291 @@
 <template>
-    <div class="chart" :id="id"></div>
+  <div class="chart" :id="id"></div>
 </template>
-  
+
 <script>
 import util from "@/helper/util.js";
 import partten from "@/helper/partten.js";
 import * as echarts from "echarts";
 
 export default {
-    name: "double-line-chart",
-    componentName: "double-line-chart",
-    props: {
-        width: {
-            type: String,
-            default: "100%",
-        },
-        height: {
-            type: String,
-            default: "13.889vh",
-        },
-        // 传入数据
-        lossPower: {
-            type: Object,
-            default: []
-        },
-        // 单位
-        unit: {
-            type: String,
-            default: "",
-        },
-        showLable: {
-            type: Boolean,
-            default: true,
-        },
-        showLegend: {
-            type: Boolean,
-            default: false,
-        },
-        // 颜色
-        color: {
-            type: Array,
-            default: () => [
-                "#005bd9",
-                "#019f2e",
-                "#db6200",
-                "#a10f0f",
-                "#850894",
-                "#9fa0a2",
-            ],
-        },
+  name: "double-line-chart",
+  componentName: "double-line-chart",
+  props: {
+    width: {
+      type: String,
+      default: "100%",
+    },
+    height: {
+      type: String,
+      default: "13.889vh",
+    },
+    // 传入数据
+    lossPower: {
+      type: Object,
+      default: [],
+    },
+    // 单位
+    unit: {
+      type: String,
+      default: "",
+    },
+    showLable: {
+      type: Boolean,
+      default: true,
+    },
+    showLegend: {
+      type: Boolean,
+      default: false,
     },
-    data() {
-        return {
-            id: "",
-            chart: null,
-            // color: ["#05bb4c", "#f8de5b", "#4b55ae", "#fa8c16", "#1DA0D7", "#DD5044"],
-            newlist: null,
-        };
+    // 颜色
+    color: {
+      type: Array,
+      default: () => [
+        "#005bd9",
+        "#019f2e",
+        "#db6200",
+        "#a10f0f",
+        "#850894",
+        "#9fa0a2",
+      ],
     },
-    watch: {
-        list: {
-            handler(newValue, oldValue) {
-                this.newlist = newValue;
-                this.$nextTick(() => {
-                    this.newlist = this.list;
-                    this.initChart();
-                });
+  },
+  data() {
+    return {
+      id: "",
+      chart: null,
+      // color: ["#05bb4c", "#f8de5b", "#4b55ae", "#fa8c16", "#1DA0D7", "#DD5044"],
+      newlist: null,
+    };
+  },
+  watch: {
+    list: {
+      handler(newValue, oldValue) {
+        this.newlist = newValue;
+        this.$nextTick(() => {
+          this.newlist = this.list;
+          this.initChart();
+        });
+      },
+      deep: true,
+    },
+    "$store.state.themeName"() {
+      this.initChart();
+    },
+  },
+  computed: {
+    colorValue() {
+      return partten.getColor(this.color);
+    },
+    datas() {
+      return this.newlist.map((t) => {
+        return t.value;
+      });
+    },
+    legend() {
+      if (this.newlist) {
+        return this.newlist.map((t) => {
+          return t.title;
+        });
+      }
+    },
+    xdata() {
+      // return this.newlist[0]?.value.map((t) => {
+      //     return t.text;
+      // });
+    },
+    series() {
+      let result = [];
+      this.list.forEach((value, index) => {
+        result.push({
+          name: value.name || value.title,
+          type: "line",
+          // smooth: value.smooth,
+          showSymbol: false,
+          zlevel: index,
+          lineStyle: {
+            normal: {
+              color: this.color[index],
+              width: 1,
             },
-            deep: true,
-        },
-        "$store.state.themeName"() {
-            this.initChart();
-        },
+          },
+          yAxisIndex: value.yAxisIndex || 0,
+          data: value.value.map((t) => {
+            return t.value;
+          }),
+        });
+      });
+      return result;
     },
-    computed: {
-        colorValue() {
-            return partten.getColor(this.color);
+    yAxis() {
+      let result = [];
+      result.push({
+        type: "value",
+        name: this.unit,
+        axisLabel: {
+          formatter: "{value}",
+          fontSize: util.vh(14),
         },
-        datas() {
-            return this.newlist.map((t) => {
-                return t.value;
-            });
+        boundaryGap: false,
+        //分格线
+        splitLine: {
+          show: false,
         },
-        legend() {
-            if (this.newlist) {
-                return this.newlist.map((t) => {
-                    return t.title;
-                });
+      });
+      return result;
+    },
+  },
+  methods: {
+    resize() {},
+    initChart() {
+      let that = this;
+      const chart = echarts.init(this.$el);
+      console.log(11);
+      let option = {
+        color: this.color,
+        legend: {
+          type: "scroll",
+          orient: "vertical",
+          right: 10,
+          bottom: 0,
+          itemWidth: 8,
+          itemHeight: 8,
+          textStyle: {
+            color: partten.getColor("grayl"),
+            fontSize: 12,
+          },
+          tooltip: {
+            show: true,
+          },
+          formatter(params) {
+            if (params.length > 4) {
+              return `${params.slice(0, 6)}...       ${
+                that.lossPower.find((val) => val.name === params)?.value
+              }`;
             }
+            return (
+              params +
+              "       " +
+              that.lossPower.find((val) => val.name === params)?.value
+            );
+
+            // return (
+            //   params +
+            //   "       " +
+            //   that.lossPower.find((val) => val.name === params)?.value
+            // );
+          },
         },
-        xdata() {
-            // return this.newlist[0]?.value.map((t) => {
-            //     return t.text;
-            // });
-        },
-        series() {
-            let result = [];
-            this.list.forEach((value, index) => {
-                result.push({
-                    name: value.name || value.title,
-                    type: "line",
-                    // smooth: value.smooth,
-                    showSymbol: false,
-                    zlevel: index,
-                    lineStyle: {
-                        normal: {
-                            color: this.color[index],
-                            width: 1,
-                        },
-                    },
-                    yAxisIndex: value.yAxisIndex || 0,
-                    data: value.value.map((t) => {
-                        return t.value;
-                    }),
-                });
-            });
-            return result;
+        radar: [
+          {
+            indicator: [{ text: "" }],
+            center: ["40%", "50%"],
+            radius: [0, 79],
+            startAngle: 60,
+            splitNumber: 5,
+            shape: "circle",
+            name: {
+              formatter: "",
+              textStyle: {
+                color: "#0000FF",
+              },
+            },
+            splitArea: {
+              areaStyle: {
+                color: "rgba(0, 0, 0, 0)",
+              },
+            },
+            axisLine: {
+              lineStyle: {
+                color: "rgba(0, 0, 0, 0)",
+              },
+            },
+            splitLine: {
+              lineStyle: {
+                color: "#0a389c",
+                shadowColor: "#0a389c",
+                shadowBlur: 10,
+              },
+            },
+          },
+        ],
+        tooltip: {
+          trigger: "item",
         },
-        yAxis() {
-            let result = [];
-            result.push({
-                type: "value",
-                name: this.unit,
-                axisLabel: {
-                    formatter: "{value}",
-                    fontSize: util.vh(14),
-                },
-                boundaryGap: false,
-                //分格线
-                splitLine: {
-                    show: false,
-                },
-            });
-            return result;
+        toolbox: {
+          show: true,
         },
-    },
-    methods: {
-        resize() { },
-        initChart() {
-            let that = this
-            const chart = echarts.init(this.$el);
-            console.log(11);
-            let option = {
-                color: this.color,
-                legend: {
-                    type: 'scroll',
-                    orient: 'vertical',
-                    right: 10,
-                    bottom: 0,
-                    itemWidth: 8,
-                    itemHeight: 8,
-                    textStyle: {
-                        color: partten.getColor("grayl"),
-                        fontSize: 12,
-                    },
-                    formatter(params) {
-                        return params + '       '+  that.lossPower.find(val => val.name === params)?.value
-                    }
-                },
-                radar: [
-                    {
-                        indicator: [
-                            { text: '' },
-                        ],
-                        center: ['40%', '50%'],
-                        radius: [0, 79],
-                        startAngle: 60,
-                        splitNumber: 5,
-                        shape: 'circle',
-                        name: {
-                            formatter: '',
-                            textStyle: {
-                                color: '#0000FF'
-                            }
-                        },
-                        splitArea: {
-                            areaStyle: {
-                                color: 'rgba(0, 0, 0, 0)',
-                            }
-                        },
-                        axisLine: {
-                            lineStyle: {
-                                color: 'rgba(0, 0, 0, 0)'
-                            }
-                        },
-                        splitLine: {
-                            lineStyle: {
-                                color: '#0a389c',
-                                shadowColor: '#0a389c',
-                                shadowBlur: 10
-                            }
-                        }
-                    },
-
-                ],
-                tooltip: {
-                    trigger: "item",
-                },
-                toolbox: {
-                    show: true,
-                },
-                series: [
-                    {
-                        name: '',
-                        type: 'pie',
-                        radius: [0, 80],
-                        center: ['40%', '50%'],
-                        roseType: 'area',
-                        label: {
-                            formatter: '{d}%',
-                        },
-                        itemStyle: {
-                            normal: {
-                                // 阴影的大小
-                                shadowBlur: 20,
-                                // 阴影水平方向上的偏移
-                                shadowOffsetX: 0,
-                                // 阴影垂直方向上的偏移
-                                shadowOffsetY: 0,
-                                // 阴影颜色
-                                shadowColor: 'rgba(0,70,199, 0.8)'
-                            },
-                            borderRadius: 2
-                        },
-                        labelLine: {
-                            length: 0,
-                            length2: 10,
-                            maxSurfaceAngle: 80
-                        },
-                        data: this.lossPower,
-                    }
-                ]
-            };
+        series: [
+          {
+            name: "",
+            type: "pie",
+            radius: [0, 80],
+            center: ["40%", "50%"],
+            roseType: "area",
+            label: {
+              formatter: "{d}%",
+            },
+            itemStyle: {
+              normal: {
+                // 阴影的大小
+                shadowBlur: 20,
+                // 阴影水平方向上的偏移
+                shadowOffsetX: 0,
+                // 阴影垂直方向上的偏移
+                shadowOffsetY: 0,
+                // 阴影颜色
+                shadowColor: "rgba(0,70,199, 0.8)",
+              },
+              borderRadius: 2,
+            },
+            labelLine: {
+              length: 0,
+              length2: 10,
+              maxSurfaceAngle: 80,
+            },
+            data: this.lossPower,
+          },
+        ],
+      };
 
-            chart.clear();
-            chart.setOption(option);
+      chart.clear();
+      chart.setOption(option);
 
-            this.resize = function () {
-                chart.resize();
-            };
+      this.resize = function () {
+        chart.resize();
+      };
 
-            window.addEventListener("resize", this.resize);
-        },
-    },
-    created() {
-        this.$nextTick(() => {
-            this.id = "pie-chart-" + util.newGUID();
-        });
-        this.newlist = this.list;
-    },
-    mounted() {
-        this.$nextTick(() => {
-            this.$el.style.width = this.width;
-            this.$el.style.height = this.height;
-            this.initChart();
-        });
-    },
-    updated() {
-        this.$nextTick(() => {
-            this.initChart();
-        });
-    },
-    unmounted() {
-        window.removeEventListener("resize", this.resize);
+      window.addEventListener("resize", this.resize);
     },
+  },
+  created() {
+    this.$nextTick(() => {
+      this.id = "pie-chart-" + util.newGUID();
+    });
+    this.newlist = this.list;
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.$el.style.width = this.width;
+      this.$el.style.height = this.height;
+      this.initChart();
+    });
+  },
+  updated() {
+    this.$nextTick(() => {
+      this.initChart();
+    });
+  },
+  unmounted() {
+    window.removeEventListener("resize", this.resize);
+  },
 };
 </script>
-  
+
 <style lang="less">
 .chart {
-    width: 100%;
-    height: 100%;
-    display: inline-block;
+  width: 100%;
+  height: 100%;
+  display: inline-block;
 }
 </style>
-  

+ 10 - 0
src/views/layout/economicsOperation/index.vue

@@ -136,6 +136,11 @@ export default {
               path: "/economicsOperation/analyse/standAloneAnalyse",
             },
             {
+              titleName: "场站性能分析",
+              icon: "",
+              path: "/economicsOperation/analyse/stationAnalyse",
+            },
+            {
               titleName: "性能等级评估",
               icon: "icon-fjfx",
               path: "/economicsOperation/performanceAnalyse/performanceAssess",
@@ -157,6 +162,11 @@ export default {
               icon: "",
               path: "/economicsOperation/powerCurve/powerLinefitting",
             },
+            {
+              titleName: "功率曲线分析",
+              icon: "",
+              path: "/economicsOperation/powerCurve/powerLineAnalyse",
+            },
             // {
             //   titleName: "切入切出分析(风)",
             //   icon: "",

+ 4 - 4
src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/dayDetailInfo.vue

@@ -164,7 +164,7 @@ export default {
           score: "yeartjsj",
         },
         {
-          name: "平均切入照",
+          name: "平均切入照",
           field: "dayxfqr",
           type: "性能",
           rank: "monthxfqr",
@@ -220,7 +220,7 @@ export default {
           score: "yearyxfss",
         },
         {
-          name: "平均照",
+          name: "平均照",
           field: "dayfs",
           type: "资源",
           rank: "monthfs",
@@ -295,7 +295,7 @@ export default {
     //整理charts数据
     changeChartsData() {
       let valArr = [
-        "平均切入照",
+        "平均切入照",
         "性能损失电量",
         "拟合优度",
         "功率一致性系数",
@@ -303,7 +303,7 @@ export default {
         "设备可利用率",
         "等效可利用系数",
         "有效光时数",
-        "平均照",
+        "平均照",
       ];
 
       const service1 = {

+ 9 - 9
src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/dayDetailInfoFd.vue

@@ -6,7 +6,7 @@
     </div>
     <div class="header">
       <span class="herder-info" v-for="item of gridDatas" :key="item"
-      >风机编号:{{ item.nemCode }}</span
+        >风机编号:{{ item.nemCode }}</span
       >
       <span class="herder-info">基础指标</span>
     </div>
@@ -290,7 +290,7 @@ export default {
           score: "yeartjsj",
         },
         {
-          name: "平均切入照",
+          name: "平均切入照",
           field: "dayxfqr",
           type: "性能",
           rank: "monthxfqr",
@@ -346,7 +346,7 @@ export default {
           score: "yearyxfss",
         },
         {
-          name: "平均照",
+          name: "平均照",
           field: "dayfs",
           type: "资源",
           rank: "monthfs",
@@ -390,16 +390,16 @@ export default {
       if (datas && datas.data) {
         if (datas.data.charts) {
           if (
-              datas.data.charts[this.oidObj.name] &&
-              datas.data.charts[this.oidObj.name].length > 0
+            datas.data.charts[this.oidObj.name] &&
+            datas.data.charts[this.oidObj.name].length > 0
           ) {
             datas.data.charts[this.oidObj.name].forEach((it, index) => {
               this.oidObj.charts.push(it);
             });
           }
           if (
-              datas.data.charts[this.tidObj.name] &&
-              datas.data.charts[this.tidObj.name].length > 0
+            datas.data.charts[this.tidObj.name] &&
+            datas.data.charts[this.tidObj.name].length > 0
           ) {
             datas.data.charts[this.tidObj.name].forEach((it, index) => {
               this.tidObj.charts.push(it);
@@ -436,7 +436,7 @@ export default {
         ];
       } else {
         valArr = [
-          "平均切入照",
+          "平均切入照",
           "性能损失电量",
           "拟合优度",
           "功率一致性系数",
@@ -444,7 +444,7 @@ export default {
           "设备可利用率",
           "等效可利用系数",
           "有效光时数",
-          "平均照",
+          "平均照",
         ];
       }
       const service1 = {

+ 1 - 1
src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/historyDetail.vue

@@ -75,7 +75,7 @@ export default {
       tableHeaderGf: [
         { title: "发电量(kWh)", code: "dayfdl" },
         { title: "理论发电量(kWh)", code: "dayllfdl" },
-        { title: "照强度(W/㎡)", code: "dayfs" },
+        { title: "照强度(W/㎡)", code: "dayfs" },
         { title: "平均功率(KW)", code: "daygl" },
         { title: "故障损失(kWh)", code: "daygzssdl" },
         { title: "限电损失(kWh)", code: "dayxdssdl" },

+ 4 - 4
src/views/layout/economicsOperation/performanceAnalyse/performanceAssess/index.vue

@@ -127,7 +127,7 @@
             sortable
             :prop="item.code"
             :label="item.title"
-            align="center"        
+            align="center"
           >
             <template #header="scope">
               <div>
@@ -228,7 +228,7 @@ export default {
       tableHeaderGf: [
         { title: "发电量(kWh)", code: "dayfdl" },
         { title: "理论发电量(kWh)", code: "dayllfdl" },
-        { title: "照强度(W/㎡)", code: "dayfs" },
+        { title: "照强度(W/㎡)", code: "dayfs" },
         { title: "平均功率(KW)", code: "daygl" },
         { title: "故障损失(kWh)", code: "daygzssdl" },
         { title: "限电损失(kWh)", code: "dayxdssdl" },
@@ -558,9 +558,9 @@ export default {
           border: none;
         }
         .el-dialog__body {
-            height: calc(100vh - 2.5vh - 54px);
+          height: calc(100vh - 2.5vh - 54px);
           padding-top: 10px;
-          .dialog-body{
+          .dialog-body {
             height: 100%;
           }
         }

+ 595 - 0
src/views/layout/economicsOperation/powerCurve/powerLineAnalyse/index.vue

@@ -0,0 +1,595 @@
+<template>
+  <div class="powerLinefitting">
+    <div class="powerLinefitting_topAll">
+      <div class="powerLinefitting_top">
+        <div class="form-wrapper">
+          <div class="select-wrapper">
+            <el-select
+              size="mini"
+              v-model="tabEvent"
+              placeholder="请选择"
+              @change="changeBtn"
+            >
+              <el-option
+                v-for="item in tabOptions"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="companyVal"
+              placeholder="请选择"
+              @change="changeCompan"
+            >
+              <el-option
+                v-for="item in companyOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="stationVal"
+              placeholder="请选择"
+              clearable
+              @change="changeStation"
+            >
+              <el-option
+                v-for="item in stationOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="windVal"
+              placeholder="请选择"
+              clearable
+              @change="changeWind"
+            >
+              <el-option
+                v-for="item in windsOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.nemCode"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="date-wrapper">
+            <div class="date-item-wrapper">
+              开始时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="starTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+            <div class="date-item-wrapper">
+              结束时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="endTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="getTableData"
+            >查询</el-button
+          >
+          <el-button round size="mini" class="buttons" @click="downXlsxFn"
+            >导出</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div style="background: rgba(0, 0, 0, 0.4)">
+      <div class="powerLinefitting_title clearfix">
+        <div class="leftContent floatLeft"><span>功率曲线分析</span></div>
+        <div class="rightContent floatRight"></div>
+      </div>
+
+      <div class="powerLinefitting_Table">
+        <el-table
+          :data="stationAnalyseData"
+          stripe
+          size="mini"
+          height="48vh"
+          ref="fitting_table"
+          style="width: 100%"
+        >
+          <el-table-column
+            v-for="(item, index) in tableHeader"
+            :key="index"
+            sortable
+            :prop="item.code"
+            :label="item.title"
+            align="center"
+          >
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="powerLinefitting_Echarts">
+      <div class="chart-name">
+        <div class="point left bottom"></div>
+        <div class="point right bottom"></div>
+        <span>功率曲线</span>
+      </div>
+      <div class="fittingEchartSty">
+        <doubleLineChart
+          :tabEvent="tabEvent"
+          :unit="'(W/m²)'"
+          :list="lineList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getApipowerAnalyse } from "@/api/monthlyPerformanceAnalysis";
+import {
+  GetOrganization,
+  GetStationByCompany,
+  GetwtByWp,
+} from "@/api/headerNav.js";
+import utils from "@/utils/downXlsx";
+import dayjs from "dayjs";
+import doubleLineChart from "@/components/chart/line/double-line-chart.vue";
+export default {
+  name: "powerLineAnalyse", //功率曲线分析
+  data() {
+    return {
+      companyVal: "",
+      companyOptions: [],
+      stationVal: "",
+      stationOptions: [],
+      windVal: "",
+      windsOptions: [],
+      starTime: "",
+      endTime: "",
+      stationAnalyseData: [],
+      tableHeader: [
+        { title: "逆变器", code: "name" },
+        { title: "时间", code: "time" },
+        { title: "实际功率", code: "sjgl" },
+        { title: "理论功率", code: "ycgl" },
+      ],
+      tabEvent: -2,
+      tabOptions: [
+        { id: -1, name: "风电" },
+        { id: -2, name: "光伏" },
+      ],
+      lineList: [],
+    };
+  },
+  components: { doubleLineChart },
+  created() {
+    this.starTime = dayjs().startOf("day").format("YYYY-MM-DD HH:mm:ss");
+    this.endTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
+    this.getCompanyData();
+  },
+  methods: {
+    //切换风电光伏
+    changeBtn() {
+      this.$router.push({
+        path: "/economicsOperation/powerCurve/powerLineAnalyseFd",
+      });
+    },
+    // 获取公司列表
+    async getCompanyData() {
+      this.companyOptions = [];
+      const datas = await GetOrganization({ type: this.tabEvent });
+      this.companyOptions = datas.data;
+      this.companyVal = datas.data[0]?.id;
+      this.getStationData(this.companyVal);
+    },
+    // 获取场站列表
+    async getStationData() {
+      this.stationOptions = [];
+      let params = {
+        type: this.tabEvent,
+        companyids: this.companyVal,
+      };
+      const datas = await GetStationByCompany(params);
+      this.stationOptions = datas.data;
+      this.stationVal = datas.data[0].id;
+      this.getWindData(this.stationVal);
+    },
+    // 获取风机
+    async getWindData(stationVal) {
+      this.windsOptions = [];
+      const datas = await GetwtByWp(stationVal);
+      if (datas.data.length) {
+        this.windsOptions = datas.data;
+        this.windVal = datas.data[0].nemCode;
+      } else {
+        this.windsOptions = datas.data;
+        this.windVal = "";
+      }
+      this.getTableData();
+    },
+    //切换公司
+    changeCompan(val) {
+      this.companyVal = val;
+      this.getStationData();
+    },
+    //切换场站
+    changeStation(val) {
+      this.stationVal = val;
+      this.getWindData(val);
+    },
+    //切换设备
+    changeWind(val) {
+      this.windVal = val;
+      this.getTableData();
+    },
+    async getTableData() {
+      let params = {
+        companys: this.companyVal,
+        type: this.tabEvent,
+        wpids: this.stationVal,
+        starttime: this.starTime,
+        endtime: this.endTime,
+        windturbineids: this.windVal,
+      };
+      const { data } = await getApipowerAnalyse(params);
+      if (data.length) {
+        this.stationAnalyseData = data.map((item) => {
+          return {
+            ...item,
+            time: dayjs(item.time).format("YYYY-MM-DD HH:mm:ss"),
+          };
+        });
+        this.lineList = [
+          {
+            name: "实际功率",
+            type: "line",
+            stack: "Total",
+            data: data.map((item) => item.sjgl),
+            time: data.map((item) =>
+              dayjs(item.time).format("YYYY-MM-DD HH:mm:ss")
+            ),
+          },
+          {
+            name: "理论功率",
+            type: "line",
+            stack: "Total",
+            data: data.map((item) => item.ycgl),
+            time: data.map((item) =>
+              dayjs(item.time).format("YYYY-MM-DD HH:mm:ss")
+            ),
+          },
+        ];
+      } else {
+        this.stationAnalyseData = [];
+        this.lineList = [
+          {
+            name: "实际功率",
+            type: "line",
+            stack: "Total",
+            data: [],
+            time: [],
+          },
+          {
+            name: "理论功率",
+            type: "line",
+            stack: "Total",
+            data: [],
+            time: [],
+          },
+        ];
+      }
+    },
+    downXlsxFn() {
+      let header = [];
+      this.tableHeader.forEach((it) => {
+        header.push(it.title);
+      });
+      utils.exportExcel(
+        this.$refs["fitting_table"].$el,
+        header,
+        "功率曲线分析"
+      );
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.powerLinefitting {
+  padding: 0 23px;
+  .powerLinefitting_topAll {
+    display: flex;
+    justify-content: space-between;
+    .powerLinefitting_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      margin-top: 10px;
+      margin-bottom: 10px;
+      .form-wrapper {
+        display: flex;
+        align-items: center;
+        .select-wrapper {
+          display: flex;
+          align-items: center;
+          .el-select {
+            width: 155px;
+            .el-input .el-input__inner {
+              width: 150px;
+            }
+          }
+        }
+        .date-wrapper {
+          display: flex;
+          align-items: center;
+          font-size: 14px;
+          font-family: Microsoft YaHei;
+          font-weight: 400;
+          color: #b3b3b3;
+          margin-left: 10px;
+          .date-item-wrapper {
+            display: flex;
+            align-items: center;
+            margin-right: 15px;
+            .date-item-date {
+              margin-left: 10px;
+              .el-input .el-input__inner {
+                font-size: 13px;
+                color: #b3b3b3;
+              }
+            }
+          }
+        }
+      }
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 25px;
+      }
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        .buttons:nth-child(1) {
+          background: rgba(0, 70, 199, 0.6);
+          border: 1px solid #1f51ae;
+          border-radius: 13px;
+          color: #fff;
+          &:hover {
+            background: rgba(14, 90, 229, 0.9);
+            border-radius: 13px;
+            color: #fff;
+          }
+        }
+        .buttons:nth-child(2) {
+          background: rgba(67, 81, 107, 0.3);
+          border: 1px solid #3b4c6c;
+          border-radius: 13px;
+          font-size: 14px;
+          color: #b3b3b3;
+        }
+      }
+    }
+    .selections {
+      display: flex;
+      margin-top: 10px;
+      position: relative;
+      right: 120px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #fff;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#0046c7, 80);
+          border: 1px solid #0046c7;
+          color: #b9b9b9;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .powerLinefitting_title {
+    padding-left: 10px;
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      background: url("../../../../../assets/imgs/title_left_bg.png");
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #ffffff;
+        margin-left: 25px;
+      }
+    }
+    .floatLeft {
+      float: left;
+    }
+    .floatRight {
+      float: right;
+    }
+    .rightContent {
+      width: 212px;
+      height: 28px;
+      margin-top: 13px;
+      background: url("../../../../../assets/imgs/title_right_bg.png");
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+
+  .powerLinefitting_Table {
+    margin: 0 5px 5px 5px;
+    padding-bottom: 10px;
+    .el-table--mini {
+      margin: 5px;
+      .el-table__header-wrapper {
+        tr {
+          background: rgba(83, 89, 104, 0.3) !important;
+          th {
+            vertical-align: top !important;
+          }
+          .cell {
+            color: #b3b3b3;
+            font-family: MicrosoftYaHei;
+            font-size: 14px;
+          }
+        }
+      }
+      .el-table__body-wrapper {
+        tr {
+          &:nth-child(2n) {
+            background: rgba(83, 89, 104, 0.05) !important;
+          }
+          .cell {
+            color: #d8d8d9;
+            font-family: ArialMT;
+            font-size: 13px;
+            height: 25px !important;
+          }
+        }
+      }
+    }
+    .historyBtn {
+      background: #43516b;
+      border-radius: 15px;
+      margin-top: 5px;
+      border: 1px solid #43516b;
+      span {
+        color: #fff;
+      }
+    }
+  }
+  .powerLinefitting_Echarts {
+    margin-top: 10px;
+    width: 100%;
+    background: rgba(0, 0, 0, 0.45);
+    position: relative;
+    height: 39px;
+    // border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+    font-size: 16px;
+    font-family: Microsoft YaHei;
+    font-weight: 400;
+    color: #ffffff;
+    .chart-name {
+      display: flex;
+      align-items: center;
+      padding-left: 20px;
+      position: relative;
+      height: 39px;
+      width: 98%;
+      margin-left: 1%;
+      border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #ffffff;
+      .point {
+        width: 6px;
+        height: 1px;
+        background-color: #ffffff;
+        position: absolute;
+
+        &.left {
+          left: 0;
+        }
+
+        &.right {
+          right: 0;
+        }
+
+        &.top {
+          top: -1px;
+        }
+
+        &.bottom {
+          bottom: -1px;
+        }
+      }
+    }
+    .fittingEchartSty {
+      width: 100%;
+      height: 280px;
+      background: rgba(0, 0, 0, 0.45);
+    }
+  }
+  .el-overlay {
+    .el-overlay-dialog {
+      overflow-y: hidden !important;
+      .powerLinefittinghistoryModel {
+        margin-top: 0 !important;
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+      .contrastModal {
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+    }
+  }
+
+  .el-picker__popper .el-date-range-picker__header .el-picker-panel__icon-btn {
+    color: #fff;
+  }
+  .el-picker__popper .el-date-table .in-range div {
+    background: #43516b;
+  }
+}
+</style>

+ 595 - 0
src/views/layout/economicsOperation/powerCurve/powerLineAnalyse/indexFd.vue

@@ -0,0 +1,595 @@
+<template>
+  <div class="powerLinefitting">
+    <div class="powerLinefitting_topAll">
+      <div class="powerLinefitting_top">
+        <div class="form-wrapper">
+          <div class="select-wrapper">
+            <el-select
+              size="mini"
+              v-model="tabEvent"
+              placeholder="请选择"
+              @change="changeBtn"
+            >
+              <el-option
+                v-for="item in tabOptions"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="companyVal"
+              placeholder="请选择"
+              @change="changeCompan"
+            >
+              <el-option
+                v-for="item in companyOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="stationVal"
+              placeholder="请选择"
+              clearable
+              @change="changeStation"
+            >
+              <el-option
+                v-for="item in stationOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.id"
+              >
+              </el-option>
+            </el-select>
+            <el-select
+              size="mini"
+              v-model="windVal"
+              placeholder="请选择"
+              clearable
+              @change="changeWind"
+            >
+              <el-option
+                v-for="item in windsOptions"
+                :key="item.id"
+                :label="item.aname"
+                :value="item.nemCode"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="date-wrapper">
+            <div class="date-item-wrapper">
+              开始时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="starTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+            <div class="date-item-wrapper">
+              结束时间
+              <div class="date-item-date">
+                <el-date-picker
+                  size="mini"
+                  v-model="endTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="选择时间"
+                >
+                </el-date-picker>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="getTableData"
+            >查询</el-button
+          >
+          <el-button round size="mini" class="buttons" @click="downXlsxFn"
+            >导出</el-button
+          >
+        </div>
+      </div>
+    </div>
+    <div style="background: rgba(0, 0, 0, 0.4)">
+      <div class="powerLinefitting_title clearfix">
+        <div class="leftContent floatLeft"><span>功率曲线分析</span></div>
+        <div class="rightContent floatRight"></div>
+      </div>
+
+      <div class="powerLinefitting_Table">
+        <el-table
+          :data="stationAnalyseData"
+          stripe
+          size="mini"
+          height="48vh"
+          ref="fitting_table"
+          style="width: 100%"
+        >
+          <el-table-column
+            v-for="(item, index) in tableHeader"
+            :key="index"
+            sortable
+            :prop="item.code"
+            :label="item.title"
+            align="center"
+          >
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+    <div class="powerLinefitting_Echarts">
+      <div class="chart-name">
+        <div class="point left bottom"></div>
+        <div class="point right bottom"></div>
+        <span>功率曲线</span>
+      </div>
+      <div class="fittingEchartSty">
+        <doubleLineChart
+          :tabEvent="tabEvent"
+          :unit="'(W/m²)'"
+          :list="lineList"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getApipowerAnalyse } from "@/api/monthlyPerformanceAnalysis";
+import {
+  GetOrganization,
+  GetStationByCompany,
+  GetwtByWp,
+} from "@/api/headerNav.js";
+import utils from "@/utils/downXlsx";
+import dayjs from "dayjs";
+import doubleLineChart from "@/components/chart/line/double-line-chart.vue";
+export default {
+  name: "powerLineAnalyse", //功率曲线分析
+  data() {
+    return {
+      companyVal: "",
+      companyOptions: [],
+      stationVal: "",
+      stationOptions: [],
+      windVal: "",
+      windsOptions: [],
+      starTime: "",
+      endTime: "",
+      stationAnalyseData: [],
+      tableHeader: [
+        { title: "风机", code: "name" },
+        { title: "时间", code: "time" },
+        { title: "实际功率", code: "sjgl" },
+        { title: "理论功率", code: "ycgl" },
+      ],
+      tabEvent: -1,
+      tabOptions: [
+        { id: -1, name: "风电" },
+        { id: -2, name: "光伏" },
+      ],
+      lineList: [],
+    };
+  },
+  components: { doubleLineChart },
+  created() {
+    this.starTime = dayjs().startOf("day").format("YYYY-MM-DD HH:mm:ss");
+    this.endTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
+    this.getCompanyData();
+  },
+  methods: {
+    //切换风电光伏
+    changeBtn() {
+      this.$router.push({
+        path: "/economicsOperation/powerCurve/powerLineAnalyse",
+      });
+    },
+    // 获取公司列表
+    async getCompanyData() {
+      this.companyOptions = [];
+      const datas = await GetOrganization({ type: this.tabEvent });
+      this.companyOptions = datas.data;
+      this.companyVal = datas.data[0]?.id;
+      this.getStationData(this.companyVal);
+    },
+    // 获取场站列表
+    async getStationData() {
+      this.stationOptions = [];
+      let params = {
+        type: this.tabEvent,
+        companyids: this.companyVal,
+      };
+      const datas = await GetStationByCompany(params);
+      this.stationOptions = datas.data;
+      this.stationVal = datas.data[0].id;
+      this.getWindData(this.stationVal);
+    },
+    // 获取风机
+    async getWindData(stationVal) {
+      this.windsOptions = [];
+      const datas = await GetwtByWp(stationVal);
+      if (datas.data.length) {
+        this.windsOptions = datas.data;
+        this.windVal = datas.data[0].nemCode;
+      } else {
+        this.windsOptions = datas.data;
+        this.windVal = "";
+      }
+      this.getTableData();
+    },
+    //切换公司
+    changeCompan(val) {
+      this.companyVal = val;
+      this.getStationData();
+    },
+    //切换场站
+    changeStation(val) {
+      this.stationVal = val;
+      this.getWindData(val);
+    },
+    //切换设备
+    changeWind(val) {
+      this.windVal = val;
+      this.getTableData();
+    },
+    async getTableData() {
+      let params = {
+        companys: this.companyVal,
+        type: this.tabEvent,
+        wpids: this.stationVal,
+        starttime: this.starTime,
+        endtime: this.endTime,
+        windturbineids: this.windVal,
+      };
+      const { data } = await getApipowerAnalyse(params);
+      if (data.length) {
+        this.stationAnalyseData = data.map((item) => {
+          return {
+            ...item,
+            time: dayjs(item.time).format("YYYY-MM-DD HH:mm:ss"),
+          };
+        });
+        this.lineList = [
+          {
+            name: "实际功率",
+            type: "line",
+            stack: "Total",
+            data: data.map((item) => item.sjgl),
+            time: data.map((item) =>
+              dayjs(item.time).format("YYYY-MM-DD HH:mm:ss")
+            ),
+          },
+          {
+            name: "理论功率",
+            type: "line",
+            stack: "Total",
+            data: data.map((item) => item.ycgl),
+            time: data.map((item) =>
+              dayjs(item.time).format("YYYY-MM-DD HH:mm:ss")
+            ),
+          },
+        ];
+      } else {
+        this.stationAnalyseData = [];
+        this.lineList = [
+          {
+            name: "实际功率",
+            type: "line",
+            stack: "Total",
+            data: [],
+            time: [],
+          },
+          {
+            name: "理论功率",
+            type: "line",
+            stack: "Total",
+            data: [],
+            time: [],
+          },
+        ];
+      }
+    },
+    downXlsxFn() {
+      let header = [];
+      this.tableHeader.forEach((it) => {
+        header.push(it.title);
+      });
+      utils.exportExcel(
+        this.$refs["fitting_table"].$el,
+        header,
+        "功率曲线分析"
+      );
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.powerLinefitting {
+  padding: 0 23px;
+  .powerLinefitting_topAll {
+    display: flex;
+    justify-content: space-between;
+    .powerLinefitting_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      margin-top: 10px;
+      margin-bottom: 10px;
+      .form-wrapper {
+        display: flex;
+        align-items: center;
+        .select-wrapper {
+          display: flex;
+          align-items: center;
+          .el-select {
+            width: 155px;
+            .el-input .el-input__inner {
+              width: 150px;
+            }
+          }
+        }
+        .date-wrapper {
+          display: flex;
+          align-items: center;
+          font-size: 14px;
+          font-family: Microsoft YaHei;
+          font-weight: 400;
+          color: #b3b3b3;
+          margin-left: 10px;
+          .date-item-wrapper {
+            display: flex;
+            align-items: center;
+            margin-right: 15px;
+            .date-item-date {
+              margin-left: 10px;
+              .el-input .el-input__inner {
+                font-size: 13px;
+                color: #b3b3b3;
+              }
+            }
+          }
+        }
+      }
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 25px;
+      }
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        .buttons:nth-child(1) {
+          background: rgba(0, 70, 199, 0.6);
+          border: 1px solid #1f51ae;
+          border-radius: 13px;
+          color: #fff;
+          &:hover {
+            background: rgba(14, 90, 229, 0.9);
+            border-radius: 13px;
+            color: #fff;
+          }
+        }
+        .buttons:nth-child(2) {
+          background: rgba(67, 81, 107, 0.3);
+          border: 1px solid #3b4c6c;
+          border-radius: 13px;
+          font-size: 14px;
+          color: #b3b3b3;
+        }
+      }
+    }
+    .selections {
+      display: flex;
+      margin-top: 10px;
+      position: relative;
+      right: 120px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #fff;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#0046c7, 80);
+          border: 1px solid #0046c7;
+          color: #b9b9b9;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+  .powerLinefitting_title {
+    padding-left: 10px;
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      background: url("../../../../../assets/imgs/title_left_bg.png");
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #ffffff;
+        margin-left: 25px;
+      }
+    }
+    .floatLeft {
+      float: left;
+    }
+    .floatRight {
+      float: right;
+    }
+    .rightContent {
+      width: 212px;
+      height: 28px;
+      margin-top: 13px;
+      background: url("../../../../../assets/imgs/title_right_bg.png");
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+
+  .powerLinefitting_Table {
+    margin: 0 5px 5px 5px;
+    padding-bottom: 10px;
+    .el-table--mini {
+      margin: 5px;
+      .el-table__header-wrapper {
+        tr {
+          background: rgba(83, 89, 104, 0.3) !important;
+          th {
+            vertical-align: top !important;
+          }
+          .cell {
+            color: #b3b3b3;
+            font-family: MicrosoftYaHei;
+            font-size: 14px;
+          }
+        }
+      }
+      .el-table__body-wrapper {
+        tr {
+          &:nth-child(2n) {
+            background: rgba(83, 89, 104, 0.05) !important;
+          }
+          .cell {
+            color: #d8d8d9;
+            font-family: ArialMT;
+            font-size: 13px;
+            height: 25px !important;
+          }
+        }
+      }
+    }
+    .historyBtn {
+      background: #43516b;
+      border-radius: 15px;
+      margin-top: 5px;
+      border: 1px solid #43516b;
+      span {
+        color: #fff;
+      }
+    }
+  }
+  .powerLinefitting_Echarts {
+    margin-top: 10px;
+    width: 100%;
+    background: rgba(0, 0, 0, 0.45);
+    position: relative;
+    height: 39px;
+    // border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+    font-size: 16px;
+    font-family: Microsoft YaHei;
+    font-weight: 400;
+    color: #ffffff;
+    .chart-name {
+      display: flex;
+      align-items: center;
+      padding-left: 20px;
+      position: relative;
+      height: 39px;
+      width: 98%;
+      margin-left: 1%;
+      border-bottom: 1px solid rgba(153, 153, 153, 0.5);
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #ffffff;
+      .point {
+        width: 6px;
+        height: 1px;
+        background-color: #ffffff;
+        position: absolute;
+
+        &.left {
+          left: 0;
+        }
+
+        &.right {
+          right: 0;
+        }
+
+        &.top {
+          top: -1px;
+        }
+
+        &.bottom {
+          bottom: -1px;
+        }
+      }
+    }
+    .fittingEchartSty {
+      width: 100%;
+      height: 280px;
+      background: rgba(0, 0, 0, 0.45);
+    }
+  }
+  .el-overlay {
+    .el-overlay-dialog {
+      overflow-y: hidden !important;
+      .powerLinefittinghistoryModel {
+        margin-top: 0 !important;
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+      .contrastModal {
+        .el-dialog__body {
+          padding-top: 10px;
+        }
+      }
+    }
+  }
+
+  .el-picker__popper .el-date-range-picker__header .el-picker-panel__icon-btn {
+    color: #fff;
+  }
+  .el-picker__popper .el-date-table .in-range div {
+    background: #43516b;
+  }
+}
+</style>

+ 6 - 2
src/views/layout/economicsOperation/powerCurve/powerLinefitting/index.vue

@@ -162,7 +162,7 @@ export default {
       powerLinefitData: [],
       tableHeader: [
         { title: "名称", code: "nemCode" },
-        { title: "照(W/m²)", code: "speed" },
+        { title: "照(W/m²)", code: "speed" },
         { title: "保证功率(KW)", code: "ensurepower" },
         { title: "拟合功率(KW)", code: "theorypower" },
       ],
@@ -343,7 +343,7 @@ export default {
             axisLabel: {
               formatter: "{value}",
               textStyle: {
-                color: partten.getColor("gray"),
+                color: "#b3b3b3",
                 fontSize: util.vh(10),
               },
             },
@@ -357,6 +357,10 @@ export default {
           axisLabel: {
             formatter: "{value}",
             fontSize: "14px",
+            color: "#b3b3b3",
+          },
+          nameTextStyle: {
+            color: "#b3b3b3",
           },
           boundaryGap: false,
           //分格线

+ 6 - 2
src/views/layout/economicsOperation/powerCurve/powerLinefitting/indexFd.vue

@@ -336,14 +336,14 @@ export default {
           right: 15,
           bottom: 24,
         },
-        xAxis: [
+       xAxis: [
           {
             type: "category",
             boundaryGap: false,
             axisLabel: {
               formatter: "{value}",
               textStyle: {
-                color: partten.getColor("gray"),
+                color: "#b3b3b3",
                 fontSize: util.vh(10),
               },
             },
@@ -357,6 +357,10 @@ export default {
           axisLabel: {
             formatter: "{value}",
             fontSize: "14px",
+            color: "#b3b3b3",
+          },
+          nameTextStyle: {
+            color: "#b3b3b3",
           },
           boundaryGap: false,
           //分格线