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 2 mēneši atpakaļ
vecāks
revīzija
604622d2b2

+ 148 - 28
src/router/index.js

@@ -214,31 +214,164 @@ export const asyncRoutes = [
                     },
                 ],
             },
-            //性能分析
+            //性能分析(山西版)
             {
                 path: "windAnalyse",
                 component: () => import("@/views/economicsOperation/windAnalyse"),
-                name: "WindAnalyse",
+                name: "windAnalyse",
                 meta: {
                     title: "性能分析",
                     icon: "svg-fdfx",
+                    permissions: ["jn_xnfx"],
+                },
+                children: [{
+                    path: "singlePowerAnalyse",
+                    component: () =>
+                        import(
+                            "@/views/sxReport/djxnfx.vue"
+                        ),
+                    name: "djxnfx",
+                    meta: {
+                        title: "单机性能分析",
+                        icon: "",
+                        permissions: ["jn_fdfx_djxnfx"],
+                    },
+                },
+                {
+                    path: "singleInfo",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/djxxzl/index.vue"
+                        ),
+                    name: "djxxzl",
+                    meta: {
+                        title: "单机信息总览",
+                        icon: "",
+                        permissions: ["jn_fdfx_djxxzl"],
+                    },
+                },
+                {
+                    path: "singleSaturation",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/singleSaturation/index.vue"
+                        ),
+                    name: "djbhd",
+                    meta: {
+                        title: "单机饱和度",
+                        icon: "",
+                        permissions: ["jn_fdfx_djbhd"],
+                    },
+                }, {
+                    path: "cutInAndOutAnalysis",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/cutInAndOutAnalysis/index.vue"
+                        ),
+                    name: "CutInAndOutAnalysis",
+                    meta: {
+                        title: "切入切出整合",
+                        icon: "",
+                        permissions: ["jn_fdfx_qrqczh"],
+                    },
+                }, {
+                    path: "powerPlan",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/powerPlan/index.vue"
+                        ),
+                    name: "powerPlan",
+                    meta: {
+                        title: "计划发电量",
+                        icon: "",
+                        permissions: ["jn_fdfx_jhfdl"],
+                    },
+                }, {
+                    path: "equipmentDifferences",
+                    component: () =>
+                        import(
+                            "@/views/sxReport/czsbcyl.vue"
+                        ),
+                    name: "equipmentDifferences",
+                    meta: {
+                        title: "场站设备差异率",
+                        icon: "",
+                        permissions: ["jn_fdfx_czsbcyl"],
+                    },
+                },{
+                    path: "powerPlan",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/powerPlan/index.vue"
+                        ),
+                    name: "powerPlan",
+                    meta: {
+                        title: "计划发电量",
+                        icon: "",
+                        permissions: ["jn_fdfx_jhfdl"],
+                    },
+                },{
+                    path: "performanceAnalysis",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/performanceAnalysis/index.vue"
+                        ),
+                    name: "performanceAnalysis",
+                    meta: {
+                        title: "风机性能分析",
+                        icon: "",
+                        permissions: ["jn_fdfx_fjxnfx"],
+                    },
+                },{
+                    path: "runningAnalysis",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/runningAnalysis/index.vue"
+                        ),
+                    name: "runningAnalysis",
+                    meta: {
+                        title: "风机运行分析",
+                        icon: "",
+                        permissions: ["jn_fdfx_fjyxfx"],
+                    },
+                },{
+                    path: "stopAnalysis",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/stopAnalysis/index.vue"
+                        ),
+                    name: "stopAnalysis",
+                    meta: {
+                        title: "停机事件分析",
+                        icon: "",
+                        permissions: ["jn_fdfx_tjsjfx"],
+                    },
+                },{
+                    path: "freeAnalysis",
+                    component: () =>
+                        import(
+                            "@/views/economicsOperation/windAnalyse/freeAnalysis/index.vue"
+                        ),
+                    name: "freeAnalysis",
+                    meta: {
+                        title: "自由报表分析",
+                        icon: "",
+                        permissions: ["jn_fdfx_zybbfx"],
+                    },
+                }],
+            },
+            //性能分析(旧版)
+            {
+                path: "windAnalyse_old",
+                component: () => import("@/views/economicsOperation/windAnalyse"),
+                name: "windAnalyse_old",
+                meta: {
+                    title: "性能分析(旧版)",
+                    icon: "svg-fdfx",
                     permissions: ["jn_fdfx"],
                 },
                 children: [
                     {
-                        path: "singleInfo",
-                        component: () =>
-                            import(
-                                "@/views/economicsOperation/windAnalyse/djxxzl/index.vue"
-                            ),
-                        name: "djxxzl",
-                        meta: {
-                            title: "单机信息总览",
-                            icon: "",
-                            permissions: ["jn_fdfx_djxxzl"],
-                        },
-                    },
-                    {
                         path: "stateTransition",
                         component: () =>
                             import(
@@ -313,19 +446,6 @@ export const asyncRoutes = [
                         },
                     },
                     {
-                        path: "cutInAndOutAnalysis",
-                        component: () =>
-                            import(
-                                "@/views/economicsOperation/windAnalyse/cutInAndOutAnalysis/index.vue"
-                            ),
-                        name: "CutInAndOutAnalysis",
-                        meta: {
-                            title: "切入切出分析",
-                            icon: "",
-                            permissions: ["jn_fdfx_qrqcfx"],
-                        },
-                    },
-                    {
                         path: "singleWindAnasyle",
                         component: () =>
                             import(

+ 3 - 2
src/views/economicsOperation/windAnalyse/cutInAndOutAnalysis/historyDetail.vue

@@ -46,9 +46,10 @@
       <div class="stationsv">
         <span class="timeaa">时间</span>
         <el-date-picker
+          style="width: 400px"
           v-model="pickerTimer"
           type="daterange"
-          range-separator="To"
+          range-separator=""
           start-placeholder="开始时间"
           end-placeholder="结束时间"
           size="mini"
@@ -121,7 +122,7 @@ import {
   getApiwpByCplistlist,
 } from "@/api/monthlyPerformanceAnalysis";
 import utils from "@/utills/downXlsx";
-import dataJson from "./dataHistoryJson.json"
+import dataJson from "./dataHistoryJson.json";
 export default {
   props: {
     historyCompanyOptions: {

+ 1 - 1
src/views/economicsOperation/windAnalyse/cutInAndOutAnalysis/index.vue

@@ -70,7 +70,7 @@
       "
     >
       <div class="cutInAndOut_title clearfix">
-        <div class="leftContent floatLeft"><span>切入切出分析</span></div>
+        <div class="leftContent floatLeft"><span>切入切出整合</span></div>
       </div>
       <div class="economicTable1">
         <el-table

+ 1 - 1
src/views/economicsOperation/windAnalyse/djxxzl/detailInfo.vue

@@ -892,7 +892,7 @@ export default {
 };
 </script>
 
-<style lang="less" >
+<style lang="less">
 .detailInfoTabs {
   background: #081410;
   color: #fff;

+ 392 - 0
src/views/economicsOperation/windAnalyse/freeAnalysis/index.vue

@@ -0,0 +1,392 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          频率:
+          <el-select size="mini" v-model="pl" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in plArray"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          部件指标:
+          <el-select
+            size="mini"
+            v-model="wp"
+            placeholder="请选择"
+            multiple
+            clearable
+            collapse-tags
+          >
+            <el-option
+              v-for="item in checkArray"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          日期:
+          <el-date-picker
+            style="width: 400px"
+            v-model="date"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            size="mini"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+          />
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+          <el-button round size="mini" class="buttons" @click="exportExcel">
+            导 出
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>风机运行分析</span>
+        </div>
+      </div>
+      <el-table
+        :data="tjsjfx"
+        stripe
+        size="mini"
+        height="90vh"
+        ref="exportExcelRef"
+      >
+        <el-table-column
+          align="center"
+          :prop="item.prop"
+          :label="item.label"
+          v-for="item in tHeader"
+          :key="item.prop"
+        />
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+
+import utils from "@/utills/downXlsx";
+
+export default {
+  components: {
+    AreaLineChart,
+  },
+
+  data() {
+    return {
+      checkAll: false,
+      isIndeterminate: true,
+      wp: "",
+      wpArray: [],
+      pl: "",
+      plArray: [],
+      date: [],
+      checkArray: [
+        { label: "风速(m/s)", value: "fs" },
+        { label: "风向", value: "fx" },
+        { label: "对风角度", value: "dfjd" },
+        { label: "发电机转速", value: "fdjzs" },
+        { label: "U1电压", value: "u1dy" },
+        { label: "U2电压", value: "u2dy" },
+        { label: "U3电压", value: "u3dy" },
+        { label: "U1电流", value: "u3dl" },
+        { label: "U2电流", value: "u3dl" },
+        { label: "U3电流", value: "u3dl" },
+        { label: "功率因数", value: "glyx" },
+        { label: "电网频率", value: "dwpl" },
+        { label: "机舱温度", value: "jcwd" },
+        { label: "齿轮油温", value: "clxyw" },
+        { label: "U2烧组温度", value: "u2szwd" },
+        { label: "功率限定值", value: "glxdz" },
+        { label: "转速限定值", value: "zsxdz" },
+        { label: "环境温度", value: "hjwd" },
+        { label: "机舱柜温度", value: "jcgwd" },
+        { label: "齿轮箱入口自油温", value: "clxrkyw" },
+        { label: "齿轮箱油温", value: "clxrkyw" },
+      ],
+      tHeader: [
+        { prop: "fj", label: "风机" },
+        { prop: "tjsj", label: "停机时间" },
+        { prop: "hfsj", label: "恢复时间" },
+        { prop: "hfsj", label: "恢复时间" },
+        { prop: "tjxs", label: "停机小时" },
+        { prop: "ssdl", label: "损失电量" },
+        { prop: "tjlx", label: "停机类型" },
+      ],
+      tjsjfx: [
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+      ],
+    };
+  },
+
+  created() {},
+
+  methods: {
+    exportExcel() {
+      if (this.tjsjfx.length > 0) {
+        let tH = [];
+        this.tHeader.forEach((ele) => {
+          tH.push(ele.label);
+        });
+        utils.exportExcel(this.$refs.exportExcelRef.$el, tH, `风机运行分析`);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    flex-wrap: wrap;
+    width: 100%;
+
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      margin-top: 10px;
+      margin-bottom: 5px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+
+      &:last-child {
+        margin-top: 0;
+        margin-bottom: 0;
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 306 - 0
src/views/economicsOperation/windAnalyse/historyPower/index.vue

@@ -0,0 +1,306 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          日期:
+          <el-date-picker
+            style="width: 400px"
+            v-model="date"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            size="mini"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+          />
+        </div>
+        <div class="station">
+          时间间隔:
+          <el-select
+            v-model="interval"
+            placeholder="Select"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in intervalArray"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>历史功率查询</span>
+        </div>
+      </div>
+      <AreaLineChart
+        style="margin: 2.5%"
+        width="95%"
+        :height="'90vh'"
+        :lineData="fjyxqkxxChartLineData"
+        :areaData="[]"
+        :showLegend="true"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+export default {
+  components: {
+    AreaLineChart,
+  },
+  data() {
+    return {
+      wp: "",
+      wpArray: [],
+      date: [],
+      interval: "30",
+      intervalArray  : [
+        {
+          label: "10分钟",
+          value: "10",
+        },
+        {
+          label: "20分钟",
+          value: "20",
+        },
+        {
+          label: "30分钟",
+          value: "30",
+        },
+      ],
+      fjyxqkxxChartLineData: [],
+    };
+  },
+
+  created() {
+    this.initFjyxqkxxChart();
+  },
+
+  mounted() {},
+
+  methods: {
+    initFjyxqkxxChart() {
+      let arr = ["实发功率", "应发功率", "预测功率", "保证功率", "平均风速"];
+      let fjyxqkxxChartLineData = [];
+      arr.forEach((ele) => {
+        let item = {
+          text: ele,
+          value: [],
+        };
+        for (let i = 50; i > -1; i--) {
+          item.value.push({
+            text: dayjs()
+              .add(Number(`-${i}`), "day")
+              .format("YYYY-MM-DD"),
+            value: this.BASE.randomNum(0, 500),
+          });
+        }
+        fjyxqkxxChartLineData.push(item);
+      });
+      this.fjyxqkxxChartLineData = fjyxqkxxChartLineData;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: space-between;
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-top: 10px;
+      padding-bottom: 10px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 305 - 0
src/views/economicsOperation/windAnalyse/performanceAnalysis/index.vue

@@ -0,0 +1,305 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          日期:
+          <el-date-picker
+            style="width: 400px"
+            v-model="date"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            size="mini"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+          />
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+          <el-button round size="mini" class="buttons" @click="exportExcel">
+            导 出
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>风机性能分析</span>
+        </div>
+      </div>
+      <el-table
+        :data="flxnfx"
+        stripe
+        size="mini"
+        height="90vh"
+        ref="exportExcelRef"
+      >
+        <el-table-column align="center" prop="p1" label="风机" />
+        <el-table-column align="center" prop="p2" label="发电量" />
+        <el-table-column align="center" prop="p2" label="理论发电量" />
+        <el-table-column align="center" prop="p2" label="故障损失电量" />
+        <el-table-column align="center" prop="p2" label="维护损失电量" />
+        <el-table-column align="center" prop="p2" label="限电损失电量" />
+        <el-table-column align="center" prop="p2" label="性能损失电量" />
+        <el-table-column align="center" prop="p2" label="受累损失电量" />
+        <el-table-column align="center" prop="p3" label="设备可利用率" />
+        <el-table-column align="center" prop="p4" label="并网时间" />
+        <el-table-column align="center" prop="p4" label="维护时间" />
+        <el-table-column align="center" prop="p4" label="故障时间" />
+        <el-table-column align="center" prop="p4" label="停机时间" />
+        <el-table-column align="center" prop="p4" label="风暴时间" />
+        <el-table-column align="center" prop="p4" label="离线时间" />
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+
+import utils from "@/utills/downXlsx";
+
+export default {
+  components: {
+    AreaLineChart,
+  },
+  data() {
+    return {
+      wp: "",
+      wpArray: [],
+      date: [],
+      flxnfx: [
+        { p1: "#01", p2: 999, p3: 80, p4: 36 },
+        { p1: "#01", p2: 999, p3: 80, p4: 36 },
+        { p1: "#01", p2: 999, p3: 80, p4: 36 },
+        { p1: "#01", p2: 999, p3: 80, p4: 36 },
+        { p1: "#01", p2: 999, p3: 80, p4: 36 },
+      ],
+    };
+  },
+
+  created() {},
+
+  methods: {
+    exportExcel() {
+      const tHeader = [
+        "风机",
+        "发电量",
+        "理论发电量",
+        "故障损失率",
+        "维护损失率",
+        "限电损失率",
+        "性能损失率",
+        "受累损失率",
+        "设备可利用率",
+        "并网时间",
+        "维护时间",
+        "故障时间",
+        "停机时间",
+        "风暴时间",
+        "离线时间",
+      ];
+      if (this.flxnfx.length > 0) {
+        utils.exportExcel(
+          this.$refs.exportExcelRef.$el,
+          tHeader,
+          `风机性能分析`
+        );
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: space-between;
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-top: 10px;
+      padding-bottom: 10px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 411 - 0
src/views/economicsOperation/windAnalyse/powerPlan/index.vue

@@ -0,0 +1,411 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          项目:
+          <el-select size="mini" v-model="xm" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in xmArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          日期:
+          <el-date-picker
+            size="mini"
+            v-model="year"
+            type="year"
+            value-format="YYYY"
+            placeholder="选择年份"
+            popper-class="date-select"
+          >
+          </el-date-picker>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+          <el-button
+            round
+            size="mini"
+            class="buttons"
+            @click="addDialogVisible = true"
+          >
+            新 增
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>计划发电量</span>
+        </div>
+      </div>
+      <el-table
+        :data="jhfdlb"
+        stripe
+        size="mini"
+        height="90%"
+        ref="historysingleTable"
+        style="width: 100%; margin-bottom: 20px"
+      >
+        <el-table-column :label="`${year}年计划发电量表(万kWh)`">
+          <el-table-column align="center" prop="mc" label="名称" />
+          <el-table-column
+            align="center"
+            :prop="item.prop"
+            :label="item.label"
+            v-for="item in columnArray"
+            :key="item.prop"
+          />
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+  <el-dialog
+    v-model="addDialogVisible"
+    width="55%"
+    top="150px"
+    custom-class="contrastModal"
+    destroy-on-close
+  >
+    <template #title>
+      <div class="dialog-title">
+        <div class="title">新增数据</div>
+      </div>
+    </template>
+    <div class="dialog-body">
+      <img class="dialog-img" src="@assets/imgs/dialog.png" />
+      <el-form
+        ref="addFormRef"
+        :model="addForm"
+        :rules="addRules"
+        label-width="auto"
+        inline
+      >
+        <el-form-item label="选择场站" prop="wp" style="margin-bottom: 24px">
+          <el-input style="width: 200px" v-model="addForm.wp" />
+        </el-form-item>
+        <el-form-item label="选择项目" prop="xm" style="margin-bottom: 24px">
+          <el-input style="width: 200px" v-model="addForm.xm" />
+        </el-form-item>
+        <el-form-item label="选择年份" prop="year" style="margin-bottom: 24px">
+          <el-input style="width: 200px" v-model="addForm.year" />
+        </el-form-item>
+        <el-form-item
+          style="margin-bottom: 24px"
+          :label="`${index + 1}月发电量`"
+          :prop="item.prop"
+          v-for="(item, index) in columnArray"
+          :key="item.prop"
+        >
+          <el-input-number
+            style="width: 200px"
+            v-model="addForm[item.prop]"
+            :min="0"
+            step="100"
+            size="mini"
+          />
+        </el-form-item>
+      </el-form>
+    </div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="addDialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="confirmFormData"> 确定 </el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+export default {
+  components: {
+    AreaLineChart,
+  },
+  data() {
+    return {
+      wp: "",
+      wpArray: [],
+      xm: "",
+      xmArray: [],
+      year: dayjs().format("YYYY"),
+      columnArray: [
+        { prop: "month_1", label: "1月" },
+        { prop: "month_2", label: "2月" },
+        { prop: "month_3", label: "3月" },
+        { prop: "month_4", label: "4月" },
+        { prop: "month_5", label: "5月" },
+        { prop: "month_6", label: "6月" },
+        { prop: "month_7", label: "7月" },
+        { prop: "month_8", label: "8月" },
+        { prop: "month_9", label: "9月" },
+        { prop: "month_10", label: "10月" },
+        { prop: "month_11", label: "11月" },
+        { prop: "month_12", label: "12月" },
+      ],
+      jhfdlb: [],
+      addDialogVisible: false,
+      addForm: {
+        wp: "",
+        xm: "",
+        year: "",
+      },
+      addRules: {
+        wp: {
+          required: true,
+          message: "此处不可为空",
+          trigger: "blur",
+        },
+        xm: {
+          required: true,
+          message: "此处不可为空",
+          trigger: "blur",
+        },
+        year: {
+          required: true,
+          message: "此处不可为空",
+          trigger: "blur",
+        },
+      },
+    };
+  },
+
+  created() {
+    this.initTableData();
+  },
+
+  methods: {
+    initTableData() {
+      let jhfdlb = [];
+      let addForm = {};
+      let addRules = {};
+      for (let i = 0; i < 20; i++) {
+        let fdlItem = {};
+        let ruleItem = {
+          required: true,
+          message: "此处不可为空",
+          trigger: "blur",
+        };
+        for (let j = 0; j < 12; j++) {
+          fdlItem.mc = `#${i + 1}`;
+          fdlItem[`month_${j + 1}`] = this.BASE.randomNum(100, 1000);
+        }
+        jhfdlb.push(fdlItem);
+        addForm[`month_${i + 1}`] = 0;
+        addRules[`month_${i + 1}`] = ruleItem;
+      }
+      this.jhfdlb = jhfdlb;
+      this.addRules = Object.assign({}, this.addRules, addRules);
+      this.addForm = Object.assign({}, this.addForm, addForm);
+    },
+
+    async confirmFormData() {
+      const formEl = this.$refs.addFormRef || null;
+      if (!formEl) return;
+      await formEl.validate((valid, fields) => {
+        if (valid) {
+          console.log("submit!");
+        } else {
+          console.log("error submit!", fields);
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: space-between;
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-top: 10px;
+      padding-bottom: 10px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 345 - 0
src/views/economicsOperation/windAnalyse/runningAnalysis/index.vue

@@ -0,0 +1,345 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+          <el-button round size="mini" class="buttons" @click="exportExcel">
+            导 出
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>风机运行分析</span>
+        </div>
+      </div>
+      <el-table
+        :data="flyxfx"
+        stripe
+        size="mini"
+        height="90vh"
+        ref="exportExcelRef"
+      >
+        <el-table-column
+          align="center"
+          :prop="item.prop"
+          :label="item.label"
+          v-for="item in tHeader"
+          :key="item.prop"
+        />
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+
+import utils from "@/utills/downXlsx";
+
+export default {
+  components: {
+    AreaLineChart,
+  },
+  data() {
+    return {
+      wp: "",
+      wpArray: [],
+      date: [],
+      tHeader: [
+        { prop: "fj", label: "风机" },
+        { prop: "fx", label: "风向" },
+        { prop: "fs", label: "风速" },
+        { prop: "gl", label: "功率" },
+        { prop: "glys", label: "功率因数" },
+        { prop: "dfjd", label: "对风角度" },
+        { prop: "flxdz", label: "功率限定值" },
+        { prop: "zsxdz", label: "转速限定值" },
+        { prop: "zt", label: "状态" },
+        { prop: "wggl", label: "无功功率" },
+      ],
+      flyxfx: [
+        {
+          fj: "#01",
+          fx: 41,
+          fs: 12,
+          gl: 999,
+          glys: 0,
+          dfjd: -75,
+          flxdz: 0,
+          zsxdz: 17,
+          zt: "离线",
+          wggl: 0,
+        },
+        {
+          fj: "#01",
+          fx: 41,
+          fs: 12,
+          gl: 999,
+          glys: 0,
+          dfjd: -75,
+          flxdz: 0,
+          zsxdz: 17,
+          zt: "离线",
+          wggl: 0,
+        },
+        {
+          fj: "#01",
+          fx: 41,
+          fs: 12,
+          gl: 999,
+          glys: 0,
+          dfjd: -75,
+          flxdz: 0,
+          zsxdz: 17,
+          zt: "离线",
+          wggl: 0,
+        },
+        {
+          fj: "#01",
+          fx: 41,
+          fs: 12,
+          gl: 999,
+          glys: 0,
+          dfjd: -75,
+          flxdz: 0,
+          zsxdz: 17,
+          zt: "离线",
+          wggl: 0,
+        },
+        {
+          fj: "#01",
+          fx: 41,
+          fs: 12,
+          gl: 999,
+          glys: 0,
+          dfjd: -75,
+          flxdz: 0,
+          zsxdz: 17,
+          zt: "离线",
+          wggl: 0,
+        },
+        {
+          fj: "#01",
+          fx: 41,
+          fs: 12,
+          gl: 999,
+          glys: 0,
+          dfjd: -75,
+          flxdz: 0,
+          zsxdz: 17,
+          zt: "离线",
+          wggl: 0,
+        },
+      ],
+    };
+  },
+
+  created() {},
+
+  methods: {
+    exportExcel() {
+      if (this.flyxfx.length > 0) {
+        let tH = [];
+        this.tHeader.forEach((ele) => {
+          tH.push(ele.label);
+        });
+        utils.exportExcel(this.$refs.exportExcelRef.$el, tH, `风机运行分析`);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: space-between;
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-top: 10px;
+      padding-bottom: 10px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 378 - 0
src/views/economicsOperation/windAnalyse/singleSaturation/index.vue

@@ -0,0 +1,378 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          风机:
+          <el-select size="mini" v-model="wt" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wtArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>单机饱和度</span>
+        </div>
+      </div>
+      <el-tabs
+        type="border-card"
+        class="detailInfoTabs"
+        v-model="activeTabName"
+        @tab-click="tabClick"
+      >
+        <el-tab-pane label="总功率情况" name="zglqk">
+          <el-table
+            :data="djzglxxb"
+            stripe
+            size="mini"
+            height="400px"
+            ref="historysingleTable"
+            style="width: 100%; margin-bottom: 20px"
+          >
+            <el-table-column label="单机总功率信息列表">
+              <el-table-column align="center" prop="bm" label="编码" />
+              <el-table-column align="center" prop="fs" label="风速" />
+              <el-table-column align="center" prop="sjgl" label="实际功率" />
+              <el-table-column
+                align="center"
+                prop="sjgl"
+                label="最优拟合功率"
+              />
+            </el-table-column>
+          </el-table>
+          <AreaLineChart
+            width="100%"
+            :height="'400px'"
+            :lineData="fjyxqkxxChartLineData"
+            :areaData="[]"
+            :showLegend="true"
+            v-if="activeTabName === 'zglqk'"
+          />
+        </el-tab-pane>
+        <el-tab-pane label="月率情况" name="yglqk">
+          <el-table
+            :data="djzglxxb"
+            stripe
+            size="mini"
+            height="400px"
+            ref="historysingleTable"
+            style="width: 100%; margin-bottom: 20px"
+          >
+            <el-table-column label="单机总功率信息列表">
+              <el-table-column align="center" prop="bm" label="编码" />
+              <el-table-column align="center" prop="fs" label="风速" />
+              <el-table-column align="center" prop="sjgl" label="实际功率" />
+              <el-table-column
+                align="center"
+                prop="sjgl"
+                label="最优拟合功率"
+              />
+            </el-table-column>
+          </el-table>
+          <AreaLineChart
+            width="100%"
+            :height="'400px'"
+            :lineData="fjyxqkxxChartLineData"
+            :areaData="[]"
+            :showLegend="true"
+            v-if="activeTabName === 'yglqk'"
+          />
+        </el-tab-pane>
+        <el-tab-pane label="日功率情况" name="rglqk">
+          <el-table
+            :data="djzglxxb"
+            stripe
+            size="mini"
+            height="400px"
+            ref="historysingleTable"
+            style="width: 100%; margin-bottom: 20px"
+          >
+            <el-table-column label="单机总功率信息列表">
+              <el-table-column align="center" prop="bm" label="编码" />
+              <el-table-column align="center" prop="fs" label="风速" />
+              <el-table-column align="center" prop="sjgl" label="实际功率" />
+              <el-table-column
+                align="center"
+                prop="sjgl"
+                label="最优拟合功率"
+              />
+            </el-table-column>
+          </el-table>
+          <AreaLineChart
+            width="100%"
+            :height="'400px'"
+            :lineData="fjyxqkxxChartLineData"
+            :areaData="[]"
+            :showLegend="true"
+            v-if="activeTabName === 'rglqk'"
+          />
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+export default {
+  components: {
+    AreaLineChart,
+  },
+  data() {
+    return {
+      wp: "",
+      wpArray: [],
+      wt: "",
+      wtArray: [],
+      fjyxqkxxChartLineData: [],
+      djzglxxb: [
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+        { bm: "#01", fs: 15, sjgl: 999, zynhgl: 9999 },
+      ],
+      activeTabName: "",
+    };
+  },
+
+  created() {
+    this.initFjyxqkxxChart();
+  },
+
+  mounted() {
+    this.$nextTick(() => {
+      this.activeTabName = "zglqk";
+    });
+  },
+
+  methods: {
+    initFjyxqkxxChart() {
+      let arr = ["实发功率", "应发功率"];
+      let fjyxqkxxChartLineData = [];
+      arr.forEach((ele) => {
+        let item = {
+          text: ele,
+          value: [],
+        };
+        for (let i = 50; i > -1; i--) {
+          item.value.push({
+            text: dayjs()
+              .add(Number(`-${i}`), "day")
+              .format("YYYY-MM-DD"),
+            value: this.BASE.randomNum(0, 500),
+          });
+        }
+        fjyxqkxxChartLineData.push(item);
+      });
+      this.fjyxqkxxChartLineData = fjyxqkxxChartLineData;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: space-between;
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-top: 10px;
+      padding-bottom: 10px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 338 - 0
src/views/economicsOperation/windAnalyse/stopAnalysis/index.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="comprehensiveEvaluation">
+    <div class="Evaluation_topall">
+      <div class="Evaluation_top">
+        <div class="station">
+          场站:
+          <el-select size="mini" v-model="wp" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in wpArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          类型:
+          <el-select size="mini" v-model="lx" placeholder="请选择" clearable>
+            <el-option
+              v-for="item in lxArray"
+              :key="item.id"
+              :label="item.aname"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </div>
+        <div class="station">
+          日期:
+          <el-date-picker
+            style="width: 400px"
+            v-model="date"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            size="mini"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+          />
+        </div>
+        <div class="but">
+          <el-button round size="mini" class="buttons" @click="seachData">
+            查 询
+          </el-button>
+          <el-button round size="mini" class="buttons" @click="exportExcel">
+            导 出
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div
+      style="
+        background: rgba(0, 0, 0, 0.4);
+        height: calc(100% - 39px);
+        padding-bottom: 15px;
+      "
+    >
+      <div class="Evaluation_title clearfix">
+        <div class="leftContent" :data-type="$store.state.moreSty">
+          <span>停机事件分析</span>
+        </div>
+      </div>
+      <el-table
+        :data="tjsjfx"
+        stripe
+        size="mini"
+        height="90vh"
+        ref="exportExcelRef"
+      >
+        <el-table-column
+          align="center"
+          :prop="item.prop"
+          :label="item.label"
+          v-for="item in tHeader"
+          :key="item.prop"
+        />
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import dayjs from "dayjs";
+import AreaLineChart from "@com/chart/combination/area-line-chart.vue";
+
+import utils from "@/utills/downXlsx";
+
+export default {
+  components: {
+    AreaLineChart,
+  },
+  data() {
+    return {
+      wp: "",
+      wpArray: [],
+      lx: "",
+      lxArray: [],
+      date: [],
+      tHeader: [
+        { prop: "fj", label: "风机" },
+        { prop: "tjsj", label: "停机时间" },
+        { prop: "hfsj", label: "恢复时间" },
+        { prop: "hfsj", label: "恢复时间" },
+        { prop: "tjxs", label: "停机小时" },
+        { prop: "ssdl", label: "损失电量" },
+        { prop: "tjlx", label: "停机类型" },
+      ],
+      tjsjfx: [
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+        {
+          fj: "#01",
+          tjsj: "2025-05-15 14:32:53",
+          hfsj: "2025-05-15 14:32:53",
+          tjxs: 10,
+          ssdl: 100,
+          tjlx: "维护停机",
+        },
+      ],
+    };
+  },
+
+  created() {},
+
+  methods: {
+    exportExcel() {
+      if (this.tjsjfx.length > 0) {
+        let tH = [];
+        this.tHeader.forEach((ele) => {
+          tH.push(ele.label);
+        });
+        utils.exportExcel(this.$refs.exportExcelRef.$el, tH, `风机运行分析`);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.comprehensiveEvaluation {
+  padding: 0 20px;
+  height: 100%;
+
+  .Evaluation_title {
+    .leftContent[data-type~="greenSty"] {
+      background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+    }
+    .leftContent[data-type~="blueSty"] {
+      background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
+    }
+    .leftContent {
+      width: 242px;
+      height: 41px;
+      line-height: 41px;
+      span {
+        font-size: 16px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #05bb4c;
+        margin-left: 25px;
+      }
+    }
+  }
+  .clearfix::after {
+    content: "";
+    clear: both;
+    height: 0;
+    line-height: 0;
+    visibility: hidden;
+    display: block;
+  }
+  .clearfix {
+    zoom: 1;
+  }
+  .Evaluation_topall {
+    display: flex;
+    justify-content: space-between;
+    .selections {
+      position: relative;
+      right: 120px;
+      display: flex;
+      margin-top: 10px;
+      .selections_btn {
+        flex: 0 0 55px;
+        text-align: center;
+        height: 33px;
+        line-height: 33px;
+        margin-right: 8px;
+        color: #b9b9b9;
+        font-size: 1.296vh;
+        background: fade(#606769, 20);
+        border: 1px solid fade(#606769, 20);
+        border-radius: 20px;
+        &:hover,
+        &.active {
+          background: fade(#05bb4c, 80);
+          border: 1px solid #05bb4c;
+          color: #fff;
+          cursor: pointer;
+        }
+      }
+    }
+    .Evaluation_top {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      padding-top: 10px;
+      padding-bottom: 10px;
+
+      .station {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #b3b3b3;
+        margin-right: 10px;
+        margin-left: 10px;
+      }
+
+      .search-input {
+        margin-left: 10px;
+        .el-input__inner {
+          width: 175px;
+        }
+        .el-input__suffix {
+          right: -50px;
+        }
+      }
+      .tabCut {
+        display: inline-block;
+        margin: 0 10px;
+
+        div {
+          display: inline-block;
+          width: 60px;
+          height: 27px;
+          border: 1px solid #274934;
+          text-align: center;
+          line-height: 25px;
+          cursor: pointer;
+        }
+
+        div:nth-child(1) {
+          border-radius: 13px 0px 0px 13px;
+          border-right-width: 0;
+        }
+
+        div:nth-child(2) {
+          border-radius: 0px 13px 13px 0px;
+        }
+
+        .active {
+          background-color: rgba(5, 187, 76, 0.9);
+          color: #fff;
+        }
+      }
+
+      .but {
+        display: flex;
+        flex-direction: row;
+        align-content: center;
+        margin-left: 20px;
+        .buttons {
+          background-color: rgba(5, 187, 76, 0.2);
+          border: 1px solid #3b6c53;
+          color: #b3b3b3;
+          font-size: 14px;
+
+          &:hover,
+          &.active {
+            background-color: rgba(5, 187, 76, 0.5);
+            color: #ffffff;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="less">
+.comprehensiveEvaluation {
+  .detailInfoTabs {
+    background: #081410;
+    color: #fff;
+    .el-tabs__header {
+      background: #081410;
+      color: #fff;
+
+      .el-tabs__item {
+        border: 0;
+
+        &.is-active {
+          background: transparent;
+        }
+
+        &::after {
+          width: 90% !important;
+          left: 5% !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 10 - 0
src/views/sxReport/czsbcyl.vue

@@ -0,0 +1,10 @@
+<template>
+  <div>场站设备差异率</div>
+</template>
+
+<script>
+export default {};
+</script>
+
+<style>
+</style>

+ 10 - 0
src/views/sxReport/djxnfx.vue

@@ -0,0 +1,10 @@
+<template>
+  <div>单机性能分析</div>
+</template>
+
+<script>
+export default {};
+</script>
+
+<style>
+</style>