瀏覽代碼

冲突处理

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 4 月之前
父節點
當前提交
ea4ebc7952
共有 31 個文件被更改,包括 7054 次插入305 次删除
  1. 二進制
      public/static/optimizationSuggestionsReport.docx
  2. 二進制
      public/static/windsReport.docx
  3. 9 1
      src/App.vue
  4. 1 1
      src/assets/css/eleCss/el-tableB.less
  5. 2 1
      src/assets/css/eleCss/el-treeW.less
  6. 二進制
      src/assets/weather/extremeWeather.png
  7. 24 2
      src/components/generatingCapacityComponent/table.vue
  8. 4 2
      src/components/generatingCapacityComponent/tree.vue
  9. 105 52
      src/components/powerPredictionComponent/homePageAssembly/weatherDetail.vue
  10. 270 0
      src/components/powerPredictionComponent/homePageAssembly/weatherPicPos.json
  11. 9 0
      src/router/index.js
  12. 55 54
      src/themeBlue.less
  13. 2 1
      src/themeDark.less
  14. 82 30
      src/views/generatingCapacity/dataAnalysis/combine/index.vue
  15. 28 4
      src/views/generatingCapacity/dataAnalysis/hotAnalysis/index.vue
  16. 4 4
      src/views/generatingCapacity/dataAnalysis/lineAnalysis/components/current-scatter-chart.vue
  17. 5 4
      src/views/generatingCapacity/dataAnalysis/lineAnalysis/index.vue
  18. 15 2
      src/views/generatingCapacity/dataAnalysis/windAnalysis/index.vue
  19. 6 2
      src/views/generatingCapacity/dataFilter/prepare/index.vue
  20. 20 14
      src/views/generatingCapacity/dataFilter/process/index.vue
  21. 7 2
      src/views/generatingCapacity/jjyxReport/index.vue
  22. 5224 0
      src/views/generatingCapacity/yhjyReport/dataJson.json
  23. 674 0
      src/views/generatingCapacity/yhjyReport/index.vue
  24. 63 87
      src/views/powerPrediction/component/homePageNoMap.json
  25. 195 1
      src/views/powerPrediction/component/statisticalSummary.json
  26. 9 13
      src/views/powerPrediction/component/weather.json
  27. 54 13
      src/views/powerPrediction/homePageNoMap.vue
  28. 1 1
      src/views/powerPrediction/powerPredictionPage.vue
  29. 37 6
      src/views/powerPrediction/statisticalSummaryPage.vue
  30. 142 6
      src/views/powerPrediction/weatherPage.vue
  31. 7 2
      src/viewsCss/homePageNoMapLess.less

二進制
public/static/optimizationSuggestionsReport.docx


二進制
public/static/windsReport.docx


File diff suppressed because it is too large
+ 9 - 1
src/App.vue


+ 1 - 1
src/assets/css/eleCss/el-tableB.less

@@ -11,7 +11,7 @@
             thead {
                 tr {
                     th {
-                        background: #8F93A7 !important;
+                        // background: #8F93A7 !important;
                         color: #fff;
                     }
                 }

+ 2 - 1
src/assets/css/eleCss/el-treeW.less

@@ -2,7 +2,8 @@
     .el-tree-node {
         // height: 32px;
         line-height: 32px;
-        background: #E6E8F2;
+        // background: #E6E8F2;
+        background: transparent;
 
         .el-tree-node__content {
             height: 32px;

二進制
src/assets/weather/extremeWeather.png


+ 24 - 2
src/components/generatingCapacityComponent/table.vue

@@ -15,7 +15,7 @@
         viewBox="0 -120 1024 1024"
         version="1.1"
         style="cursor: pointer"
-        @click="handleExport"
+        @click="handlefilesExport"
         xmlns="http://www.w3.org/2000/svg"
         p-id="2706"
         width="35"
@@ -110,6 +110,12 @@ export default {
         return "";
       },
     },
+    tableFilePath: {
+      type: String,
+      default: () => {
+        return "";
+      },
+    },
     theme: {
       type: Boolean,
       default: () => {
@@ -164,6 +170,22 @@ export default {
         if (typeof console !== "undefined") console.error(e);
       }
     },
+    handlefilesExport() {
+        ElMessageBox.confirm("确认导出当前节点的所有数据?", "导出", {
+            confirmButtonText: "确认",
+            cancelButtonText: "取消",
+            type: "warning",
+          }).then(() => {
+            const a = document.createElement("a");
+            let childs = [];
+            const url = "/export/files?filename="
+            a.href =
+              process.env.VUE_APP_GENERAT_URL + url + this.tableFilePath;
+            a.download = "";
+            a.target = "_blank";
+            a.click();
+          });
+    },
   },
 
   watch: {
@@ -180,7 +202,7 @@ export default {
     display: flex;
 
     p {
-      width: 20%;
+      width: 5%;
       text-overflow: ellipsis;
       white-space: nowrap;
       overflow: hidden;

+ 4 - 2
src/components/generatingCapacityComponent/tree.vue

@@ -13,7 +13,7 @@
     </div>
     <div class="treeMain">
       <div class="treeMainTit">
-        <span>数据</span>
+        <span>{{showTitle}}</span>
       </div>
       <!-- <div v-for="node in data" :key="node.id" class="treeMainMsg">
                 <span>{{node.label}}</span>
@@ -74,7 +74,7 @@
               {{ node.label }}
             </span>
             <span>{{ node.label }}</span>
-            <template #dropdown>
+            <template #dropdown v-if="node.label.indexOf('风电场') !== -1">
               <el-dropdown-menu>
                 <el-dropdown-item
                   class="text-[#409EFF]"
@@ -179,6 +179,7 @@ export default {
         label: "label",
       },
       activeNode: "",
+      showTitle: "",
       defaultExpandedKeys: [],
     };
   },
@@ -194,6 +195,7 @@ export default {
     },
 
     data(value) {
+        this.showTitle = value.length>0 ? value[0].label : "数据"
       this.defaultExpandedKeys = this.getDefaultExpandedKey([], value);
     },
   },

+ 105 - 52
src/components/powerPredictionComponent/homePageAssembly/weatherDetail.vue

@@ -7,38 +7,45 @@
                     <template #label>
                         <div class="tabLabel">
                             <p>{{item.name}}</p>
-                            <p>{{item.data[0].name}}</p>
+                            <!-- <p>{{item.data[0].name}}</p> -->
                         </div>
                     </template>
                     <div class="tabMain">
-                        <img :src="item.data[0].img" alt="">
-                        <div class="tabMain_msg">
-                            <div class="detailsMsg">{{item.data[0].msg}}</div>
-                            <div class="detailsTime">
-                                <div class="detailN">
-                                    <span>预警时间:</span>
-                                    <span>{{item.weather.update_time}};</span>
+                        <div class="extremeMsg">
+                            <div class="extremeW" :style="havePicPos(item.alertObj.alertTitle)"
+                                v-if="showColor(item.alertObj.alertTitle)"></div>
+                            <img :src="item.data[0].img" alt="" v-else>
+                            <div class="tabMain_msg">
+                                <!-- <div class="detailsMsg">{{item.data[0].msg}}</div> -->
+                                <div class="detailsTimesv">
+                                    <div class="detailN">
+                                        <span>极端天气预警:</span>
+                                        <span
+                                            :style="haveColor(item.alertObj.alertTitle)">{{item.alertObj.alertTitle}};</span>
+                                    </div>
+                                </div>
+
+                                <div class="detailsTime">
+                                    <div class="detailN">
+                                        <span>温度:</span>
+                                        <span>{{item.weatherDetail.temperature_day || item.weatherDetail.temperature}}℃;</span>
+                                    </div>
+                                    <div class="detailN">
+                                        <span>湿度:</span>
+                                        <span>{{item.weather.humidity}}%;</span>
+                                    </div>
+                                    <div class="detailN">
+                                        <span>气压:</span>
+                                        <span>{{item.weather.pressure}}kPa;</span>
+                                    </div>
+                                    <div class="detailN">
+                                        <span>风力:</span>
+                                        <span>{{item.weather.wind_power}};</span>
+                                    </div>
                                 </div>
                             </div>
                         </div>
-                    </div>
-                    <div class="detailsTime">
-                        <div class="detailN">
-                            <span>温度:</span>
-                            <span>{{item.weatherDetail.temperature_day || item.weatherDetail.temperature}}℃;</span>
-                        </div>
-                        <div class="detailN">
-                            <span>湿度:</span>
-                            <span>{{item.weather.humidity}}%;</span>
-                        </div>
-                        <div class="detailN">
-                            <span>气压:</span>
-                            <span>{{item.weather.pressure}}kPa;</span>
-                        </div>
-                        <div class="detailN">
-                            <span>风力:</span>
-                            <span>{{item.weather.wind_power}};</span>
-                        </div>
+                        <div class="detailsMsg">{{item.alertObj.alertMessage}}</div>
                     </div>
                 </el-tab-pane>
             </el-tabs>
@@ -78,6 +85,8 @@
     import rain from '@/assets/weather/rain.png'
     import snow from '@/assets/weather/snow.png'
     import thunder from '@/assets/weather/thunder.png'
+
+    import picPosJson from './weatherPicPos.json'
     export default {
         data() {
             return {
@@ -85,13 +94,36 @@
                 title: '',
                 messageAll: [],
                 activeName: '',
-                statusName: ''
+                statusName: '',
+                //天气与图片位置对应
+                weaPic: picPosJson.data
             }
         },
         methods: {
             handleClick(tab, event) {
                 console.log(tab, event);
                 this.activeName = tab.props.name
+            },
+            haveColor(title) {
+                let str = 'margin-left:5px;font-weight: 600;color:'
+                this.weaPic.forEach(it => {
+                    if (title.indexOf(it.name) != -1) {
+                        str += it.status
+                    }
+                })
+                return str
+            },
+            showColor(str) {
+                return str.indexOf("预警") !== -1
+            },
+            havePicPos(title) {
+                let str = 'background-position:'
+                this.weaPic.forEach(it => {
+                    if (title.indexOf(it.name) != -1) {
+                        str += it.position
+                    }
+                })
+                return str
             }
         }
     }
@@ -137,45 +169,66 @@
 
                         .el-tabs__content {
                             .tabMain {
-                                display: flex;
+                                padding-right: 20px;
+
+                                .extremeMsg {
+                                    display: flex;
+                                    margin-bottom: 10px;
+
+                                    .extremeW {
+                                        margin: 15px 0 0 20px;
+                                        width: 110px;
+                                        height: 100px;
+                                        background-image: url(../../../assets/weather/extremeWeather.png);
+                                        // background-position: -11px -19px;
+                                    }
 
-                                img {
-                                    width: 180px;
-                                    height: 180px;
-                                    margin: 30px 0 0 20px;
-                                }
 
-                                .tabMain_msg {
-                                    margin: 30px 0 0 20px;
+                                    .tabMain_msg {
+                                        margin: 22px 0 0 10px;
 
-                                    .detailsMsg {
-                                        height: 180px;
-                                        font-size: 18px;
-                                        line-height: 30px;
-                                        text-indent: 2em;
-                                    }
-
-                                    .detailsTime {
-                                        margin-top: 20px;
-                                        font-size: 18px;
-                                        display: flex;
-                                        justify-content: end;
+                                        .detailsTimesv {
+                                            margin-bottom: 20px;
+                                            font-size: 18px;
+                                            display: flex;
+                                            justify-content: start;
 
-                                        .detailN {
-                                            margin-right: 20px;
+                                            .detailN {
+                                                margin-right: 20px;
 
-                                            span:nth-of-type(1) {
-                                                font-weight: bold;
+                                                span:nth-of-type(1) {
+                                                    font-weight: bold;
+                                                }
                                             }
                                         }
+
                                     }
+
                                 }
+
+
+                                .detailsMsg {
+                                    overflow-y: auto;
+                                    height: 230px;
+                                    font-size: 18px;
+                                    line-height: 30px;
+                                    text-indent: 2em;
+                                    padding-left: 30px;
+                                }
+
+
+                                img {
+                                    width: 120px;
+                                    height: 120px;
+                                    margin: 30px 0 0 20px;
+                                }
+
                             }
 
                             .detailsTime {
                                 display: flex;
                                 justify-content: end;
-                                margin-top: 20px;
+                                margin-top: 10px;
                                 font-size: 18px;
 
                                 .detailN {

+ 270 - 0
src/components/powerPredictionComponent/homePageAssembly/weatherPicPos.json

@@ -0,0 +1,270 @@
+{
+    "data": [
+        {
+            "name": "台风蓝色",
+            "status": "blue",
+            "position": "-11px -19px"
+        },
+        {
+            "name": "暴雨蓝色",
+            "status": "blue",
+            "position": "-134px -19px"
+        },
+        {
+            "name": "高温蓝色",
+            "status": "blue",
+            "position": "-264px -19px"
+        },
+        {
+            "name": "寒冷蓝色",
+            "status": "blue",
+            "position": "-393px -19px"
+        },
+        {
+            "name": "大雾蓝色",
+            "status": "blue",
+            "position": "-518px -19px"
+        },
+        {
+            "name": "灰霾蓝色",
+            "status": "blue",
+            "position": "-11px -145px"
+        },
+        {
+            "name": "雷雨大风蓝色",
+            "status": "blue",
+            "position": "-134px -145px"
+        },
+        {
+            "name": "冰雹蓝色",
+            "status": "blue",
+            "position": "-264px -145px"
+        },
+        {
+            "name": "道路结冰蓝色",
+            "status": "blue",
+            "position": "-393px -145px"
+        },
+        {
+            "name": "森林火灾蓝色",
+            "status": "blue",
+            "position": "-518px -145px"
+        },
+        {
+            "name": "暴雪蓝色",
+            "status": "blue",
+            "position": "-11px -280px"
+        },
+        {
+            "name": "大风蓝色",
+            "status": "blue",
+            "position": "-135px -280px"
+        },
+        {
+            "name": "雷电蓝色",
+            "status": "blue",
+            "position": "-260px -280px"
+        },
+
+
+        {
+            "name": "台风黄色",
+            "status": "yellow",
+            "position": "-11px -425px"
+        },
+        {
+            "name": "暴雨黄色",
+            "status": "yellow",
+            "position": "-134px -425px"
+        },
+        {
+            "name": "高温黄色",
+            "status": "yellow",
+            "position": "-264px -425px"
+        },
+        {
+            "name": "寒冷黄色",
+            "status": "yellow",
+            "position": "-393px -425px"
+        },
+        {
+            "name": "大雾黄色",
+            "status": "yellow",
+            "position": "-518px -425px"
+        },
+        {
+            "name": "灰霾黄色",
+            "status": "yellow",
+            "position": "-11px -552px"
+        },
+        {
+            "name": "雷雨大风黄色",
+            "status": "yellow",
+            "position": "-134px -552px"
+        },
+        {
+            "name": "冰雹黄色",
+            "status": "yellow",
+            "position": "-264px -552px"
+        },
+        {
+            "name": "道路结冰黄色",
+            "status": "yellow",
+            "position": "-393px -552px"
+        },
+        {
+            "name": "森林火灾黄色",
+            "status": "yellow",
+            "position": "-518px -552px"
+        },
+        {
+            "name": "暴雪黄色",
+            "status": "yellow",
+            "position": "-11px -690px"
+        },
+        {
+            "name": "大风黄色",
+            "status": "yellow",
+            "position": "-135px -690px"
+        },
+        {
+            "name": "雷电黄色",
+            "status": "yellow",
+            "position": "-260px -690px"
+        },
+
+
+        {
+            "name": "台风橙色",
+            "status": "orange",
+            "position": "-11px -833px"
+        },
+        {
+            "name": "暴雨橙色",
+            "status": "orange",
+            "position": "-134px -833px"
+        },
+        {
+            "name": "高温橙色",
+            "status": "orange",
+            "position": "-264px -833px"
+        },
+        {
+            "name": "寒冷橙色",
+            "status": "orange",
+            "position": "-393px -833px"
+        },
+        {
+            "name": "大雾橙色",
+            "status": "orange",
+            "position": "-518px -833px"
+        },
+        {
+            "name": "灰霾橙色",
+            "status": "orange",
+            "position": "-11px -957px"
+        },
+        {
+            "name": "雷雨大风橙色",
+            "status": "orange",
+            "position": "-134px -957px"
+        },
+        {
+            "name": "冰雹橙色",
+            "status": "orange",
+            "position": "-264px -957px"
+        },
+        {
+            "name": "道路结冰橙色",
+            "status": "orange",
+            "position": "-393px -957px"
+        },
+        {
+            "name": "森林火灾橙色",
+            "status": "orange",
+            "position": "-518px -957px"
+        },
+        {
+            "name": "暴雪橙色",
+            "status": "orange",
+            "position": "-11px -1085px"
+        },
+        {
+            "name": "大风橙色",
+            "status": "orange",
+            "position": "-135px -1085px"
+        },
+        {
+            "name": "雷电橙色",
+            "status": "orange",
+            "position": "-260px -1085px"
+        },
+
+
+        {
+            "name": "台风红色",
+            "status": "red",
+            "position": "-11px -1224px"
+        },
+        {
+            "name": "暴雨红色",
+            "status": "red",
+            "position": "-134px -1224px"
+        },
+        {
+            "name": "高温红色",
+            "status": "red",
+            "position": "-264px -1224px"
+        },
+        {
+            "name": "寒冷红色",
+            "status": "red",
+            "position": "-393px -1224px"
+        },
+        {
+            "name": "大雾红色",
+            "status": "red",
+            "position": "-518px -1224px"
+        },
+        {
+            "name": "灰霾红色",
+            "status": "red",
+            "position": "-11px -1350px"
+        },
+        {
+            "name": "雷雨大风红色",
+            "status": "red",
+            "position": "-134px -1350px"
+        },
+        {
+            "name": "冰雹红色",
+            "status": "red",
+            "position": "-264px -1350px"
+        },
+        {
+            "name": "道路结冰红色",
+            "status": "red",
+            "position": "-393px -1350px"
+        },
+        {
+            "name": "森林火灾红色",
+            "status": "red",
+            "position": "-518px -1350px"
+        },
+        {
+            "name": "暴雪红色",
+            "status": "red",
+            "position": "-11px -1470px"
+        },
+        {
+            "name": "大风红色",
+            "status": "red",
+            "position": "-135px -1470px"
+        },
+        {
+            "name": "雷电红色",
+            "status": "red",
+            "position": "-260px -1470px"
+        }
+    ]
+}

+ 9 - 0
src/router/index.js

@@ -358,6 +358,15 @@ const routes = [
         component: () =>
             import("../views/generatingCapacity/jjyxReport/index.vue"),
     },
+    {
+        path: "/generatingCap/dataAnalysis/yhjyReport",
+        name: "yhjyReport",
+        meta: {
+            title: "优化建议报告",
+        },
+        component: () =>
+            import("../views/generatingCapacity/yhjyReport/index.vue"),
+    },
     // 综合报警
     // {
     //     path: "/integratedAlarm",

+ 55 - 54
src/themeBlue.less

@@ -25,24 +25,25 @@
 @jbs5: linear-gradient(to right, #f1880c, #ffd179);
 @jbs6: linear-gradient(to right, #ff293d, #ff9ea7);
 
-@green          : #05bb4c;
-@gray           : #606769;
-@gray-l         : #000;
+@green : #05bb4c;
+@gray : #606769;
+@gray-l : #000;
 @picker-bg-color: fade(rgb(3, 7, 19), 95);
 
-@primary-color    : #2568c4;
-@border-color     : transparent;
-@text-color       : #fff;
+@primary-color : #2568c4;
+@border-color : transparent;
+@text-color : #fff;
 @placeholder-color: #c0c4cc;
-@disabled-color   : #c0c4cc;
-@disabled-bg      : #000;
+@disabled-color : #c0c4cc;
+@disabled-bg : #000;
 
 .blueStyle {
     #app {
         #screen {
 
             // /generatingCap/dataAnalysis/jjyxReport
-            .analysisReport {
+            .analysisReport,
+            .optimizationSuggestions {
                 .main_top {
                     background: #fff;
 
@@ -90,7 +91,7 @@
                 .el-table,
                 .custom-table.el-table {
                     background: rgb(3, 7, 19);
-                    border    : 1px solid rgba(33, 105, 195, 0.5) !important; // 包裹表格父元素边框
+                    border: 1px solid rgba(33, 105, 195, 0.5) !important; // 包裹表格父元素边框
 
                     .el-table__row {
                         background: transparent; // 表格底色,因表格上层有其他颜色遮挡所以视觉效果看起来仿佛是表格边框
@@ -128,22 +129,22 @@
 
                     tr {
                         td {
-                            color           : #000;
+                            color: #000;
                             background-color: #fff; // 表格基数行背景颜色
                         }
 
                         &:hover td {
-                            color           : #1890ff; // 表格基数行 hover 文字颜色
+                            color: #1890ff; // 表格基数行 hover 文字颜色
                             background-color: #fff !important; // 表格基数行 hover 背景颜色
                         }
                     }
 
                     td {
-                        border     : 0px; // 表格内部除了最后一行底部以外的上下左右边框
-                        padding    : 0;
-                        height     : 37px;
+                        border: 0px; // 表格内部除了最后一行底部以外的上下左右边框
+                        padding: 0;
+                        height: 37px;
                         line-height: 37px;
-                        color      : rgb(194, 225, 255);
+                        color: rgb(194, 225, 255);
 
                         &.light,
                         &.always-light {
@@ -152,14 +153,14 @@
                     }
 
                     th {
-                        border     : 0px;
-                        padding    : 0px;
-                        height     : 37px;
+                        border: 0px;
+                        padding: 0px;
+                        height: 37px;
                         line-height: 37px;
                         font-weight: normal;
-                        text-align : center;
-                        color      : rgb(85, 113, 166);
-                        cursor     : pointer;
+                        text-align: center;
+                        color: rgb(85, 113, 166);
+                        cursor: pointer;
 
                         &.is-leaf {
                             border: 0px;
@@ -174,27 +175,27 @@
                     th,
                     tr {
                         background-color: transparent;
-                        border          : 0px;
+                        border: 0px;
                     }
 
                     thead {
-                        color      : @gray-l;
+                        color: @gray-l;
                         font-weight: 500;
-                        font-size  : 14px;
-                        border     : 0px;
+                        font-size: 14px;
+                        border: 0px;
 
                         th,
                         &.is-group th {
                             &.el-table__cell {
-                                background  : rgb(31, 83, 177) !important;
+                                background: rgb(31, 83, 177) !important;
                                 border-color: transparent !important;
-                                color       : #fff;
+                                color: #fff;
                             }
                         }
                     }
 
                     .el-table__body {
-                        border   : 0px; // 表格最外侧除右边以外边框
+                        border: 0px; // 表格最外侧除右边以外边框
                         font-size: 14px;
                     }
 
@@ -204,7 +205,7 @@
                         }
 
                         &:hover td {
-                            color           : #1890ff;
+                            color: #1890ff;
                             background-color: rgb(250, 250, 250) !important; // 表格偶数行 hover 背景颜色
                         }
 
@@ -241,7 +242,7 @@
             .el-table,
             .custom-table.el-table {
                 background: #fff;
-                border    : 1px solid rgba(33, 105, 195, 0.5) !important; // 包裹表格父元素边框
+                border: 1px solid rgba(33, 105, 195, 0.5) !important; // 包裹表格父元素边框
 
                 .el-table__row {
                     background: transparent; // 表格底色,因表格上层有其他颜色遮挡所以视觉效果看起来仿佛是表格边框
@@ -271,22 +272,22 @@
 
                 tr {
                     td {
-                        color           : #000;
+                        color: #000;
                         background-color: #fff; // 表格基数行背景颜色
                     }
 
                     &:hover td {
-                        color           : #1890ff; // 表格基数行 hover 文字颜色
+                        color: #1890ff; // 表格基数行 hover 文字颜色
                         background-color: #fff !important; // 表格基数行 hover 背景颜色
                     }
                 }
 
                 td {
-                    border     : 0px; // 表格内部除了最后一行底部以外的上下左右边框
-                    padding    : 0;
-                    height     : 37px;
+                    border: 0px; // 表格内部除了最后一行底部以外的上下左右边框
+                    padding: 0;
+                    height: 37px;
                     line-height: 37px;
-                    color      : rgb(194, 225, 255);
+                    color: rgb(194, 225, 255);
 
                     &.light,
                     &.always-light {
@@ -295,14 +296,14 @@
                 }
 
                 th {
-                    border     : 0px;
-                    padding    : 0px;
-                    height     : 37px;
+                    border: 0px;
+                    padding: 0px;
+                    height: 37px;
                     line-height: 37px;
                     font-weight: normal;
-                    text-align : center;
-                    color      : rgb(85, 113, 166);
-                    cursor     : pointer;
+                    text-align: center;
+                    color: rgb(85, 113, 166);
+                    cursor: pointer;
 
                     &.is-leaf {
                         border: 0px;
@@ -317,27 +318,27 @@
                 th,
                 tr {
                     background-color: transparent;
-                    border          : 0px;
+                    border: 0px;
                 }
 
                 thead {
-                    color      : @gray-l;
+                    color: @gray-l;
                     font-weight: 500;
-                    font-size  : 14px;
-                    border     : 0px;
+                    font-size: 14px;
+                    border: 0px;
 
                     th,
                     &.is-group th {
                         &.el-table__cell {
-                            background  : rgb(31, 83, 177) !important;
+                            background: rgb(31, 83, 177) !important;
                             border-color: transparent !important;
-                            color       : #fff;
+                            color: #fff;
                         }
                     }
                 }
 
                 .el-table__body {
-                    border   : 0px; // 表格最外侧除右边以外边框
+                    border: 0px; // 表格最外侧除右边以外边框
                     font-size: 14px;
                 }
 
@@ -347,7 +348,7 @@
                     }
 
                     &:hover td {
-                        color           : #1890ff;
+                        color: #1890ff;
                         background-color: rgb(250, 250, 250) !important; // 表格偶数行 hover 背景颜色
                     }
 
@@ -385,7 +386,7 @@
         .el-dialog.windLifeDialog,
         .el-dialog {
             background: #fff;
-            border    : 1px solid rgba(31, 83, 177, 0.5);
+            border: 1px solid rgba(31, 83, 177, 0.5);
             box-shadow: 0px 8px 17px 1px rgba(31, 83, 177, 0.3);
 
             .dialog-title {
@@ -531,9 +532,9 @@
         .point-popover {
             .el-popper__arrow {
                 &:before {
-                    border-color      : var(--el-popover-border-color) !important;
+                    border-color: var(--el-popover-border-color) !important;
                     border-right-color: transparent !important;
-                    border-top-color  : transparent !important;
+                    border-top-color: transparent !important;
                 }
             }
         }

+ 2 - 1
src/themeDark.less

@@ -373,7 +373,8 @@
         }
 
         // /generatingCap/dataAnalysis/jjyxReport
-        .analysisReport {
+        .analysisReport,
+        .optimizationSuggestions {
             .infoBox {
                 background: rgb(4, 12, 11);
             }

+ 82 - 30
src/views/generatingCapacity/dataAnalysis/combine/index.vue

@@ -2,7 +2,7 @@
   <div class="dataAnalysisCom" :class="!theme ? 'themeDark' : 'themeLight'">
     <div class="dataAnalysisComMain">
       <div class="main_top">
-        <p class="topPsty">功率曲线拟合分析</p>
+        <p class="topPsty">功率曲线拟合</p>
         <search-cop @submit="funSubmit" :maxProduction="maxProduction"> </search-cop>
       </div>
       <div class="main">
@@ -16,15 +16,17 @@
             @refresh="funGetTree"
           >
           </tree-cop>
-          <tree-cop
-            :dropdownMenu="['export', 'delete', 'save']"
-            :data="processTreeData"
-            :currentNodeKey="currentNodeKey"
-            :height="treeHeight"
-            @currentChange="funProcessCurrentChange"
-            @refresh="funGetProcessTree"
-          >
-          </tree-cop>
+          <div style="padding: 5px 0;border-radius: 5px;" :style="theme === false ? 'background: #181A1E' : 'background: #cdcdde'" >
+            <tree-cop
+                :dropdownMenu="['export', 'delete', 'save']"
+                :data="processTreeData"
+                :currentNodeKey="currentNodeKey"
+                :height="treeHeight"
+                @currentChange="funProcessCurrentChange"
+                @refresh="funGetProcessTree"
+            >
+            </tree-cop>
+          </div>
         </div>
         <div class="excelDataMain">
           <div class="excelDataMain_top">
@@ -103,6 +105,7 @@
                 :height="tableHeight"
                 :tableId="tableShowId"
                 :tableName="tableName"
+                :tableFilePath="tableFilePath"
               >
               </table-cop>
             </el-tab-pane>
@@ -254,7 +257,14 @@ const funExcelChange = async (obj) => {
   activeTab.value = "1";
   isChartArea.value = false;
   tableShowId.value = obj.id;
-  tableName.value = obj.name;
+  let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+  tableX.forEach(it =>{
+    if (obj.name.indexOf(it) !== -1) {
+        tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+        return
+    }
+  })
+  tableFilePath.value = obj.path;
   excelType.value = obj.type; // 接收excel的type 用于控制右侧tab展示
 
   let res = null;
@@ -308,8 +318,10 @@ const funExcelChange = async (obj) => {
   if (chartResponse && chartResponse.code === 200) {
     chartRes = chartResponse.data;
     markDot.pcl5 = chartRes.obj.pc5ratio;
-    markDot.pcl10 = chartRes.obj.pc10ratio;
-    markDot.pcl12 = chartRes.obj.pc12ratio;
+    markDot.pcl7 = chartRes.obj.pc7ratio;
+    markDot.pcl9 = chartRes.obj.pc9ratio;
+    markDot.pcl11 = chartRes.obj.pc11ratio;
+    markDot.pcl20 = chartRes.obj.pc20ratio;
     markDot.pcl25 = chartRes.obj.pc25ratio;
     avgObj.title = chartRes.obj.path
       .substring(
@@ -559,6 +571,7 @@ const tableShowId = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableName = ref("");
+const tableFilePath = ref("")
 const tableData = ref([]);
 /**table 结束 */
 /**search 开始 */
@@ -601,9 +614,11 @@ const avgObj = reactive({
 const markDot = reactive({
   //3-5 point点等
   pcl5: null,
-  pcl10: null,
-  pcl12: null,
-  pcl25: null,
+  pcl7: null,
+  pcl9: null,
+  pcl11: null,
+  pcl20: null,
+  pcl25: null
 });
 const xAxisData = ref([]);
 const chartRef = ref(); //chart 的ref
@@ -707,11 +722,19 @@ const funChartArea = () => {
               valueIndex: 0,
             },
             {
-              xAxis: 10,
+              xAxis: 7,
               valueIndex: 0,
             },
             {
-              xAxis: 12,
+              xAxis: 9,
+              valueIndex: 0,
+            },
+            {
+              xAxis: 11,
+              valueIndex: 0,
+            },
+            {
+              xAxis: 20,
               valueIndex: 0,
             },
             {
@@ -744,26 +767,44 @@ const funChartArea = () => {
             ],
             [
               {
-                name: `5~10m 偏差率: ${markDot.pcl10}%`,
+                name: `5~7m 偏差率: ${markDot.pcl7}%`,
                 xAxis: 5,
               },
               {
-                xAxis: 10,
+                xAxis: 7,
+              },
+            ],
+            [
+              {
+                name: `7~9m 偏差率: ${markDot.pcl9}%`,
+                xAxis: 7,
+              },
+              {
+                xAxis: 9,
+              },
+            ],
+            [
+              {
+                name: `9~11m 偏差率: ${markDot.pcl11}%`,
+                xAxis: 9,
+              },
+              {
+                xAxis: 11,
               },
             ],
             [
               {
-                name: `10~12m 偏差率: ${markDot.pcl12}%`,
-                xAxis: 10,
+                name: `11~20m 偏差率: ${markDot.pcl20}%`,
+                xAxis: 11,
               },
               {
-                xAxis: 12,
+                xAxis: 20,
               },
             ],
             [
               {
-                name: `12~25m 偏差率: ${markDot.pcl25}%`,
-                xAxis: 12,
+                name: `20~25m 偏差率: ${markDot.pcl25}%`,
+                xAxis: 20,
               },
               {
                 xAxis: 25,
@@ -910,7 +951,14 @@ const initPageData = () => {
     activeTab.value = "1";
     isChartArea.value = false;
     tableShowId.value = obj.id;
-    tableName.value = obj.name;
+    let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+    tableX.forEach(it =>{
+        if (obj.name.indexOf(it) !== -1) {
+            tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+            return
+        }
+    })
+    tableFilePath.value = obj.path;
     excelType.value = obj.type; // 接收excel的type 用于控制右侧tab展示
 
     let chartRes = {
@@ -934,9 +982,12 @@ const initPageData = () => {
 
     chartRes = jsonData.chartData;
     markDot.pcl5 = chartRes.obj.pc5ratio;
-    markDot.pcl10 = chartRes.obj.pc10ratio;
-    markDot.pcl12 = chartRes.obj.pc12ratio;
+    markDot.pcl7 = chartRes.obj.pc7ratio;
+    markDot.pcl9 = chartRes.obj.pc9ratio;
+    markDot.pcl11 = chartRes.obj.pc11ratio;
+    markDot.pcl20 = chartRes.obj.pc20ratio;
     markDot.pcl25 = chartRes.obj.pc25ratio;
+    
     avgObj.title = chartRes.obj.path
       .substring(
         chartRes.obj.path.indexOf(chartRes.obj.station + "_") +
@@ -1093,7 +1144,8 @@ onMounted(() => {
 
       .treeDataMain {
         margin-right: 10px;
-        padding: 10px 0 10px 10px;
+        // padding: 10px 0 10px 10px;
+        padding: 10px 5px;
         width: calc(19% - 20px);
       }
 
@@ -1139,7 +1191,7 @@ onMounted(() => {
       background: #13171e;
 
       .treeDataMain {
-        background: transparent;
+        background: #142446;
       }
 
       .excelDataMain {

+ 28 - 4
src/views/generatingCapacity/dataAnalysis/hotAnalysis/index.vue

@@ -139,7 +139,8 @@
                     :theme="theme"
                     :height="tableHeight"
                     tableId="1"
-                    tableName="温度与功率分析"
+                    :tableName="tableName"
+                    :tableFilePath="tableFilePath"
                   ></table-cop>
                 </div>
               </el-tabs>
@@ -149,7 +150,7 @@
       </div>
     </div>
     <el-dialog
-      custom-class="windLifeDialog"
+      class="windLifeDialog"
       draggable
       width="80%"
       v-model="dialog"
@@ -158,6 +159,7 @@
       <el-form class="whitespace-nowrap" :inline="true" :model="queryForm">
         <el-form-item label="" class="!mb-0">
           <el-select
+            style="width:110px"
             v-model="queryForm.checkIds"
             clearable
             @clear="checkAll = false"
@@ -315,14 +317,25 @@ const tableDataGet = async () => {
 const excelCheckboxShow = ref(false);
 const excelCheckIds = ref([]);
 const excelList = ref([]);
+const tableName = ref("");
+const tableFilePath = ref("");
 const funExcelChange = async (obj) => {
   //点击excel项时
   /**次代码供温度功率曲线分析使用 */
   excelCheckIds.value = [obj.id]; //当为单选展示风机图表时
+  let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+  tableX.forEach(it =>{
+    if (obj.name.indexOf(it) !== -1) {
+        tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+        return
+    }
+  })
+  tableFilePath.value = obj.path;
+
   chartExcelList.value = excelList.value.map((o) => {
     return {
       ...o,
-      name: o.name.split("_")[0],
+      name: o.code,
     };
   }); // 选中excel当前项时, excel列表赋值给dialog 下拉框
   queryForm.checkIds = excelList.value.map((o) => o.id);
@@ -447,6 +460,7 @@ const funCurrentChange = ({ current, currentNode }) => {
     excelList.value = current.childs.map((o) => {
       return {
         id: o.id,
+        code: o.code,
         interval: o.interval,
         path: o.path,
         prepareid: o.prepareid,
@@ -500,6 +514,7 @@ const funProcessCurrentChange = ({ current, currentNode }) => {
     excelList.value = current.childs.map((o) => {
       return {
         id: o.id,
+        code: o.code,
         interval: o.interval,
         path: o.path,
         prepareid: o.prepareid,
@@ -1133,6 +1148,7 @@ const initPageData = () => {
       excelList.value = actTreeNode.value.childs.map((o) => {
         return {
           id: o.id,
+          code: o.code,
           interval: o.interval,
           path: o.path,
           prepareid: o.prepareid,
@@ -1167,10 +1183,18 @@ const initPageData = () => {
     currentNodeKey.value = actTreeNode.value?.id || "";
 
     excelCheckIds.value = [obj.id]; //当为单选展示风机图表时
+    let tableX = ["未满发样板机", "满发样板机", "未满发", "满发" ]
+    tableX.forEach(it =>{
+        if (obj.name.indexOf(it) !== -1) {
+            tableName.value = obj.name.substring(0, obj.name.indexOf(it)-1)
+            return
+        }
+    })
+    tableFilePath.value = obj.path;
     chartExcelList.value = excelList.value.map((o) => {
       return {
         ...o,
-        name: o.name.split("_")[0],
+        name: o.windturbine,
       };
     }); // 选中excel当前项时, excel列表赋值给dialog 下拉框
     queryForm.checkIds = excelList.value.map((o) => o.id);

+ 4 - 4
src/views/generatingCapacity/dataAnalysis/lineAnalysis/components/current-scatter-chart.vue

@@ -134,14 +134,14 @@ export default {
         //     : "rgba(255,255,255,0.5)",
         //工具箱
         color: [
-          "rgb(255,0,0)",
+          "#ff0000",
           "#FF8700",
-          "#e6b600d9",
-          "#0098d9",
           "#3D54BE",
+          "#32a487",
           "#005eaa",
           "#cda819",
-          "#32a487",
+          "#7500d9",
+          "#6ce600",
         ],
         toolbox: {
           show: false,

+ 5 - 4
src/views/generatingCapacity/dataAnalysis/lineAnalysis/index.vue

@@ -99,14 +99,15 @@
           </bar-chart-cop>
         </div>
         <div v-if="activeTab === '2'">
-          <bar-chart-cop
-            height="600px"
-            :colors="[
+            <!-- :colors="[color: ["#05bb4c", "#C531C7", "#4b55ae", "#fa8c16", "#1DA0D7", "#DD5044"],
               'rgb(222,132,82)',
               'rgb(105,188,80)',
               'rgb(197,78,82)',
               'rgb(129,114,181)',
-            ]"
+            ]" -->
+          <bar-chart-cop
+            height="600px"
+            :colors="['#05bb4c', '#C531C7', '#4b55ae', '#fa8c16', '#1DA0D7', '#DD5044', '#323E6F']"
             width="100%"
             :xAxis="barxAxis"
             :yAxis="baryAxis"

+ 15 - 2
src/views/generatingCapacity/dataAnalysis/windAnalysis/index.vue

@@ -92,7 +92,8 @@ const excelHeight = ref(window.innerHeight - 111 + "px"); //excel高度
 const tableHeight = ref(window.innerHeight - 175 + "px");
 /**table 开始 */
 const tableShowId = ref("");
-const tableName = ref("损失电量分析");
+const tableName = ref("");
+const tableFilePath = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableData = ref([]);
@@ -279,7 +280,9 @@ const excelCheckIds = ref([]);
 const excelList = ref([]);
 const funExcelChange = async (obj) => {
   //点击excel项时
-  return false;
+//   return false;
+tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+tableFilePath.value = obj.path;
 };
 const funExcelCheckChange = ({ checkArr, data }) => {
   //bug
@@ -415,6 +418,16 @@ const initPageData = () => {
       excelList.value = [];
     }
 
+    const child = actTreeNode.value.childs[0];
+    const obj = {
+      path: child.path,
+      name: child.path.substring(
+        child.path.indexOf(child.station + "_") + (child.station + "_").length
+      ),
+    };
+    tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+    tableFilePath.value = obj.path;
+
     if (treeCopRef.value) {
       treeCopRef.value.$refs.tree.setCheckedKeys([actTreeNode.value.id]);
       excelCheckIds.value = actTreeNode.value.childs.map((o) => o.id);

+ 6 - 2
src/views/generatingCapacity/dataFilter/prepare/index.vue

@@ -35,6 +35,7 @@
             :height="tableHeight"
             :tableId="tableShowId"
             :tableName="tableName"
+            :tableFilePath="tableFilePath"
             @export="funExport"
           >
           </table-cop>
@@ -78,7 +79,8 @@ const currentNodeKey = ref("");
 const funExcelChange = async (obj) => {
   //点击excel项时
   tableShowId.value = obj.id;
-  tableName.value = obj.name;
+  tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+  tableFilePath.value = obj.path;
   tableLoading.value = true;
 
   const res = await httpRequest.get("/power/prepare/show", {
@@ -179,6 +181,7 @@ const funCurrentChange = ({ current, currentNode }) => {
 /**table 开始 */
 const tableShowId = ref("");
 const tableName = ref("");
+const tableFilePath = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableData = ref([]);
@@ -264,7 +267,8 @@ const initPageData = () => {
     currentNodeKey.value = actTreeNode.value?.id || "";
 
     tableShowId.value = obj.id;
-    tableName.value = obj.name;
+    tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+    tableFilePath.value = obj.path;
     tableLoading.value = true;
 
     tableColumn.value = jsonData.tableData.title.map((o) => {

+ 20 - 14
src/views/generatingCapacity/dataFilter/process/index.vue

@@ -20,18 +20,20 @@
             @checkChange="funTreeCheckChange"
           >
           </tree-cop>
-          <tree-cop
-            :data="processTreeData"
-            :height="treeHeight"
-            :currentNodeKey="currentNodeKey"
-            @currentChange="
-              (treeItem) => {
-                funProcessCurrentChange(treeItem);
-              }
-            "
-            @refresh="funGetProcessTree"
-          >
-          </tree-cop>
+          <div style="padding: 5px 0;border-radius: 5px;" :style="theme === false ? 'background: #181A1E' : 'background: #cdcdde'" >
+            <tree-cop
+                :data="processTreeData"
+                :height="treeHeight"
+                :currentNodeKey="currentNodeKey"
+                @currentChange="
+                (treeItem) => {
+                    funProcessCurrentChange(treeItem);
+                }
+                "
+                @refresh="funGetProcessTree"
+            >
+            </tree-cop>
+          </div>
         </div>
         <div class="excelDataMain">
           <excel-cop
@@ -55,6 +57,7 @@
             :height="tableHeight"
             :tableId="tableShowId"
             :tableName="tableName"
+            :tableFilePath="tableFilePath"
             @export="funExport"
           >
           </table-cop>
@@ -91,7 +94,8 @@ const maxProduction = ref(2500);
 const funExcelChange = async (obj) => {
   //点击excel项时
   tableShowId.value = obj.id;
-  tableName.value = obj.name;
+  tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+  tableFilePath.value = obj.path;
   let res = null;
   tableLoading.value = true;
   if (obj.type === "prepare") {
@@ -274,6 +278,7 @@ const tableShowId = ref("");
 const tableColumn = ref([]);
 const tableLoading = ref(false);
 const tableName = ref("");
+const tableFilePath = ref("")
 const tableData = ref([]);
 const funExport = async () => {
   const a = document.createElement("a");
@@ -368,7 +373,8 @@ const initPageData = () => {
     };
     currentNodeKey.value = actTreeNode.value?.id || "";
     tableShowId.value = obj.id;
-    tableName.value = obj.name;
+    tableName.value = obj.name.substring(0, obj.name.indexOf('_'));
+    tableFilePath.value = obj.path;
     let res = null;
     tableLoading.value = true;
     tableColumn.value = jsonData.tableData.title.map((o) => {

+ 7 - 2
src/views/generatingCapacity/jjyxReport/index.vue

@@ -1082,7 +1082,13 @@ export default {
       httpRequest
         .get(`/MeetingReport/Analysisreport?time=${this.reportParamDate}`)
         .then((tempRes) => {
-          tempRes.data.titleYear = tempRes.data.title.year;
+            this.exportWORDChange(tempRes)
+        }).catch(() => {
+            this.exportWORDChange({ data: jsonData.reportData });
+          });
+    },
+    exportWORDChange(tempRes) {
+        tempRes.data.titleYear = tempRes.data.title.year;
           tempRes.data.titleMonth = tempRes.data.title.month;
           tempRes.data.titleName = tempRes.data.title.name;
           tempRes.data.dlcylistM = [];
@@ -1232,7 +1238,6 @@ export default {
               saveAs(out, `${tempRes.data.title.name}.docx`);
             }
           );
-        });
     },
     handleReportOp() {
       if (this.reportParamDate) {

File diff suppressed because it is too large
+ 5224 - 0
src/views/generatingCapacity/yhjyReport/dataJson.json


+ 674 - 0
src/views/generatingCapacity/yhjyReport/index.vue

@@ -0,0 +1,674 @@
+<template>
+    <div class="optimizationSuggestions">
+        <div class="main_top">
+            <p class="topPsty">优化建议报告</p>
+            <div class="seach">
+                <el-form class="generat-seach" :inline="true">
+                    <el-form-item label="场站">
+                        <el-select v-model="reportStation" placeholder="选择场站">
+                            <el-option v-for="item in stationList" :key="item.id" :label="item.name" :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="报告月份" class="!mb-0">
+                        <el-date-picker style="width: 120px" v-model="reportParamDate" type="month"
+                            value-format="YYYY-MM" placeholder="请选择" />
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button type="primary" @click="handleReportOp">查询</el-button>
+                        <!-- <el-button
+              style="width: 100px"
+              type="danger"
+              @click="exportPDFop"
+              :loading="loading"
+              >导出 PDF</el-button
+            > -->
+                        <el-button style="width: 100px" type="primary" @click="exportWORD" :loading="loading">导出 WORD
+                        </el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+        <div class="infoBox">
+            <div id="pdfDomop" :class="!theme ? 'block' : 'white'"
+                :style="!theme ? 'background-color: #040c0b' : 'background-color: #fff'">
+                <h2 style="
+            font-weight: bolder;
+            text-align: center;
+            margin-bottom: 20px;
+            text-align: center;
+          " :style="!theme ? 'color: #fff' : 'color: #000'">
+                    {{ OperationName }}
+                </h2>
+                <!-- 概述 -->
+                <h3 style="text-indent: 2em; font-weight: bolder; margin-bottom: 10px"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    1.概述
+                </h3>
+                <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                    {{ OperationGs }}
+                </p>
+                <h4 style="text-indent: 2em; font-weight: bolder; margin: 10px 0"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    1.1 风电场基本信息
+                </h4>
+                <div style="text-indent: 2em;line-height: 30px;font-size: 15px;" v-for="(item, index) in basrMsgArr"
+                    :key="index">
+                    <span style="background: #fff;
+            width: 8px;
+            height: 8px;
+            border-radius: 10px;
+            display: inline-block;
+            margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
+                    <span style="font-weight: bolder;margin-right: 10px;"
+                        :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span>
+                    <span style="
+            text-align: justify;
+            line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item.value }}</span>
+                </div>
+                <!-- 筛选标准 -->
+                <h3 style="text-indent: 2em; font-weight: bolder; margin-bottom: 10px; margin-top: 10px"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    2.筛选标准
+                </h3>
+                <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                    本报告依据以下标准对风机进行筛选:
+                </p>
+                <div style="text-indent: 2em;line-height: 30px;font-size: 15px;" v-for="(item, index) in orderMsgArr"
+                    :key="index">
+                    <span style="background: #fff;
+            width: 8px;
+            height: 8px;
+            border-radius: 10px;
+            display: inline-block;
+            margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
+                    <span style="font-weight: bolder;margin-right: 10px;"
+                        :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span>
+                    <span style="
+            text-align: justify;
+            line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item.value }}</span>
+                </div>
+                <!-- 风机筛选分析 -->
+                <h3 style="text-indent: 2em; font-weight: bolder; margin-bottom: 10px; margin-top: 10px"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    3.风机筛选分析
+                </h3>
+                <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                    根据以上标准,对每台风机的运行数据及隐患问题信息进行分析,结果如下:
+                </p>
+                <div class="warn-table">
+                    <el-table class="toolSty" :data="fjsxList1" border style="width: 100%; margin: 10px 0"
+                        max-height="500" stripe :header-cell-style="{
+                padding: '4px',
+                fontSize: '14px',
+                border: '0.5px solid rgba(0,0,0,.5) !important',
+            }" :cell-style="{
+                height: '40px',
+                padding: '3px',
+                fontSize: '12px',
+                'border-top': '0px solid rgba(0,0,0,.5)',
+                'border-bottom': '1px solid rgba(0,0,0,.5)',
+                'border-right': '1px solid  rgba(0,0,0,.5)',
+                }">
+                        <el-table-column prop="turbineId" align="center" label="风机编号" width="150" />
+                        <el-table-column prop="ratedPowerKw" align="center" label="额定功率(KW)" width="90" />
+                        <el-table-column prop="actualRatedPowerKw" align="center" label="实际额定功率(KW)" width="90" />
+                        <el-table-column v-for="(item, index) in orderTableColumn" :key="index" :label="item.name"
+                            :width="item.width" align="center">
+                            <el-table-column v-for="(res, index) in item.children" :key="index" :label="res.name"
+                                align="center">
+                                <template #default="scope">
+                                    <span>
+                                        {{ scope.row[res.code] }}
+                                    </span>
+                                </template>
+                            </el-table-column>
+                        </el-table-column>
+                        <el-table-column align="center" prop="performanceIssues" label="性能问题" width="90"
+                            fixed="right" />
+                    </el-table>
+                    <!-- 温度类隐患 -->
+                    <el-table class="toolSty" :data="fjsxList2" border style="width: 100%; margin: 10px 0"
+                        max-height="500" stripe :header-cell-style="{
+                padding: '4px',
+                fontSize: '14px',
+                border: '0.5px solid rgba(0,0,0,.5) !important',
+            }" :cell-style="{
+                height: '40px',
+                padding: '3px',
+                fontSize: '12px',
+                'border-top': '0px solid rgba(0,0,0,.5)',
+                'border-bottom': '1px solid rgba(0,0,0,.5)',
+                'border-right': '1px solid rgba(0,0,0,.5)',
+                }">
+                        <el-table-column prop="turbineId" align="center" label="风机编号" width="150" fixed />
+                        <el-table-column prop="downtimeCount" align="center" label="故障停机次数" width="80" />
+                        <el-table-column v-for="(item, index) in orderTableColumn2" :key="index" :label="item.name"
+                            :width="item.width" align="center">
+                            <el-table-column v-for="(res, index) in item.children" :key="index" :label="res.name"
+                                align="center">
+                                <template #default="scope">
+                                    <span>
+                                        {{ scope.row[res.code] ? scope.row[res.code] : '-' }}
+                                    </span>
+                                </template>
+                            </el-table-column>
+                        </el-table-column>
+                        <el-table-column prop="reliabilityIssue" align="center" label="可靠性问题" width="100"
+                            fixed="right" />
+                    </el-table>
+                </div>
+
+                <h4 style="text-indent: 2em; font-weight: bolder; margin: 10px 0"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    3.1 筛选结果
+                </h4>
+                <div style="text-indent: 2em;line-height: 30px;font-size: 15px;" v-for="(item, index) in orderResultArr"
+                    :key="index">
+                    <span style="background: #fff;
+            width: 8px;
+            height: 8px;
+            border-radius: 10px;
+            display: inline-block;
+            margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
+                    <span style="font-weight: bolder;margin-right: 10px;"
+                        :style="!theme ? 'color: #fff' : 'color: #000'">{{item.windName}}: </span>
+                    <span style="
+            text-align: justify;margin-right: 10px;
+            line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item.value }}</span>
+                </div>
+
+                <!-- 风机情况说明 -->
+                <h3 style="text-indent: 2em; font-weight: bolder; margin-bottom: 10px; margin-top: 10px"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    4.风机情况说明
+                </h3>
+                <div v-for="(val, key, index) in windSituationReport" :key="index">
+                    <h4 style="text-indent: 2em; font-weight: bolder; margin: 10px 0"
+                        :style="!theme ? 'color: #fff' : 'color: #000'">
+                        {{`4.${index+1} ${key}` }}
+                    </h4>
+                    <div style="text-indent: 2em;line-height: 30px;font-size: 15px;" v-for="(item, index) in val"
+                        :key="index">
+                        <span style="background: #fff;
+                width: 8px;
+                height: 8px;
+                border-radius: 10px;
+                display: inline-block;
+                margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
+                        <!-- <span style="font-weight: bolder;margin-right: 10px;"
+                            :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span> -->
+                        <span style="
+                text-align: justify;
+                line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item }}</span>
+                    </div>
+                </div>
+
+                <!-- 检修建议 -->
+                <h3 style="text-indent: 2em; font-weight: bolder; margin-bottom: 10px; margin-top: 10px"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    5.检修建议
+                </h3>
+                <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                    针对筛选出的风机,提出以下检修建议:
+                </p>
+                <div v-for="(val, key, index) in maintenanceRecommendations" :key="index">
+                    <h4 style="text-indent: 2em; font-weight: bolder; margin: 10px 0"
+                        :style="!theme ? 'color: #fff' : 'color: #000'">
+                        {{`5.${index+1} ${key}` }}
+                    </h4>
+                    <div style="text-indent: 2em;line-height: 30px;font-size: 15px;" v-for="(item, idx) in val"
+                        :key="idx">
+                        <span style="background: #fff;
+                width: 8px;
+                height: 8px;
+                border-radius: 10px;
+                display: inline-block;
+                margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
+                        <!-- <span>{{idx+1}}</span> -->
+                        <!-- <span style="font-weight: bolder;margin-right: 10px;"
+                            :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span> -->
+                        <span style="
+                text-align: justify;
+                line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item }}</span>
+                    </div>
+                </div>
+
+                <!-- 结论 -->
+                <h3 style="text-indent: 2em; font-weight: bolder; margin-bottom: 10px; margin-top: 10px"
+                    :style="!theme ? 'color: #fff' : 'color: #000'">
+                    6.结论
+                </h3>
+                <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                    {{conclusionMsg}}
+                </p>
+                <!-- <div style="text-indent: 2em;line-height: 30px;font-size: 15px;"
+                    v-for="(item, idx) in conclusionMsg.resultObj" :key="idx">
+                    <span style="background: #fff;
+            width: 8px;
+            height: 8px;
+            border-radius: 10px;
+            display: inline-block;
+            margin: 0 15px 0 15px;" :style="!theme ? 'background: #fff' : 'background: #000'"></span>
+                    <span style="font-weight: bolder;margin-right: 10px;"
+                        :style="!theme ? 'color: #fff' : 'color: #000'">{{item.name}}: </span>
+                    <span style="
+            text-align: justify;
+            line-height: 22px;" :style="!theme ? 'color: #fff' : 'color: #000'">{{ item.value }}</span>
+                </div> -->
+
+                <!-- <div style="display: flex; margin-top: 15px">
+                    <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                        编写人:XXX
+                    </p>
+                    <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                        审核人:XXX
+                    </p>
+                    <p style="
+            text-indent: 2em;
+            font-size: 15px;
+            text-align: justify;
+            line-height: 22px;
+          ">
+                        日期:XXX
+                    </p>
+                </div> -->
+
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+    import httpRequest from "@/utils/request.js";
+    import htmlToPdf from "../report/fixGetPDF";
+    import Docxtemplater from "docxtemplater";
+    import PizZip from "pizzip";
+    import JSZipUtils from "jszip-utils";
+    import {
+        saveAs
+    } from "file-saver";
+    import dayjs from "dayjs";
+
+    import {
+        apiGetbaseStation
+    } from "@/api/gengra";
+
+    import {
+        ElMessage
+    } from "element-plus";
+
+    import jsonData from "./dataJson.json";
+    import twoxizeJson from "../report/lianggexizeJson";
+    export default {
+        name: "yhjyReport",
+        data() {
+            return {
+                stationList: [],
+                reportStation: "",
+                basrMsgArr: jsonData.basrMsgArr,
+                orderMsgArr: jsonData.orderMsgArr,
+                orderResultArr: [],
+                maintenanceRecommendations: [],
+                windSituationReport: [],
+                orderTableColumn: jsonData.orderTableColumn,
+                orderTableColumn2: jsonData.orderTableColumn2,
+                conclusionMsg: {},
+                OperationName: "",
+                OperationGs: "",
+                OperationMonth: "",
+                fjsxList1: [],
+                fjsxList2: [],
+                theme: true,
+                loading: false,
+                reportParamDate: dayjs()
+                    .startOf("month")
+                    .format("YYYY-MM"),
+            };
+        },
+
+        created() {
+            this.theme = this.$store.state.theme;
+        },
+
+        mounted() {
+            this.funGetStation()
+        },
+
+        methods: {
+            /**场站 */
+            funGetStation() {
+                let that = this;
+                this.renderReportPage({
+                    data: jsonData.data
+                });
+                apiGetbaseStation().then((res) => {
+                    if (res) {
+                        that.stationList = res.data;
+                        if (that.stationList.length) {
+                            that.reportStation = that.stationList[0].id;
+                            that.handleReportOp()
+                        }
+                    }
+                });
+            },
+            exportPDFop() {
+                this.loading = true;
+                htmlToPdf.getPdf(
+                    document.querySelector("#pdfDomop"),
+                    "经济运行分析会报告"
+                );
+                setTimeout(() => {
+                    this.loading = false;
+                    ElMessage.success("打印成功!");
+                }, 1000);
+            },
+            exportWORD() {
+                httpRequest
+                    .get(`/WarningReport/report?time=${this.reportParamDate}&wpid=${this.reportStation}`)
+                    .then((tempRes) => {
+                        this.getWordFn(tempRes)
+                    }).catch(e => {
+                        this.getWordFn({
+                            data: jsonData.data
+                        })
+                    });
+            },
+            // 导出word方法
+            getWordFn(tempRes) {
+                let temWordData = {
+                    titleName: this.OperationName,
+                    operationGs: this.OperationGs,
+                    stationName: tempRes.data.stationid.aname,
+                    windNumber: tempRes.data.stationid.jrwindQuantityLd,
+                    zzjrl: tempRes.data.stationid.windCapacity,
+                    reportTime: tempRes.data.reporttime,
+                    fjsxList1: tempRes.data.xnwtls,
+                    fjsxList2: [],
+                    orderResultArr: this.orderResultArr,
+                    windSituationReportWord: [],
+                    maintenanceRecommendationsWord: [],
+                    conclusionResult: `本次分析针对${tempRes.data.stationid.aname}的风机发电能力下降及可靠性隐患进行了全面评估。通过实施短期和长期检修措施,预计将显著提高设备的发电效率和运行可靠性。`
+                }
+
+                tempRes.data.kkxwtls.forEach(it => {
+                    for (const key in it) {
+                        if (Object.prototype.hasOwnProperty.call(it, key)) {
+                            const element = it[key];
+                            if (element === null) {
+                                it[key] = '-'
+                            }
+                        }
+                    }
+                })
+                temWordData.fjsxList2 = tempRes.data.kkxwtls
+
+                //4.风机情况说明
+                let qksmNum = 0
+                for (const key in tempRes.data.qksm) {
+                    if (Object.prototype.hasOwnProperty.call(tempRes.data.qksm, key)) {
+                        const element = tempRes.data.qksm[key];
+                        let eleArr = []
+
+                        element.forEach(it => {
+                            let eleObj = {
+                                name: it.substring(0, it.indexOf(':')),
+                                value: it.substring(it.indexOf(':'), it.length)
+                            }
+                            eleArr.push(eleObj)
+                        })
+                        let obj = {
+                            index: qksmNum++,
+                            windName: key,
+                            windValue: eleArr
+                        }
+                        temWordData.windSituationReportWord.push(obj)
+                    }
+                }
+
+                //5.风机情况说明
+                let jxjyNum = 0
+                for (const key in tempRes.data.jxjy) {
+                    if (Object.prototype.hasOwnProperty.call(tempRes.data.jxjy, key)) {
+                        const element = tempRes.data.jxjy[key];
+                        let eleArr = []
+                        element.forEach(it => {
+                            let eleObj = {
+                                name: it.substring(0, it.indexOf(':')),
+                                value: it.substring(it.indexOf(':'), it.length)
+                            }
+                            eleArr.push(eleObj)
+                        })
+                        let obj = {
+                            index: jxjyNum++,
+                            windName: key,
+                            windValue: eleArr
+                        }
+                        temWordData.maintenanceRecommendationsWord.push(obj)
+                    }
+                }
+
+                // 读取并获得模板文件的二进制内容
+                JSZipUtils.getBinaryContent(
+                    `./static/optimizationSuggestionsReport.docx`,
+                    (error, content) => {
+                        // 抛出异常
+                        if (error) throw error;
+                        // 创建一个JSZip实例,内容为模板的内容
+                        let zip = new PizZip(content);
+                        // 创建并加载docxtemplater实例对象
+                        let doc = new Docxtemplater();
+                        doc.loadZip(zip);
+                        doc.setData(temWordData);
+                        try {
+                            // 用模板变量的值替换所有模板变量
+                            doc.render();
+                        } catch (error) {
+                            // 抛出异常
+                            let e = {
+                                message: error.message,
+                                name: error.name,
+                                stack: error.stack,
+                                properties: error.properties,
+                            };
+                            console.log(JSON.stringify({
+                                error: e
+                            }));
+                            throw error;
+                        }
+                        // 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)
+                        let out = doc.getZip().generate({
+                            type: "blob",
+                            mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+                        });
+                        // 将目标文件对象保存为目标类型的文件,并命名
+                        saveAs(out, `${temWordData.titleName}.docx`);
+                    }
+                );
+            },
+            handleReportOp() {
+                if (this.reportParamDate) {
+                    this.OperationName = "";
+                    this.OperationGs = ""
+                    this.OperationMonth = "";
+
+                    httpRequest
+                        .get(`/WarningReport/report?time=${this.reportParamDate}&wpid=${this.reportStation}`)
+                        .then((res) => {
+                            this.renderReportPage(res);
+                        })
+                        .catch(() => {
+                            this.renderReportPage({
+                                data: jsonData.data
+                            });
+                        });
+                }
+            },
+
+            renderReportPage(res) {
+
+                this.OperationMonth = res.data.reporttime
+                let date = this.OperationMonth.split('-')
+                this.OperationName = date[0] + '年' + date[1] + '月' + res.data.stationid.aname + '性能及可靠性优化建议报告';
+                this.OperationGs = `本报告旨在对${res.data.stationid.aname}内的风机进行综合分析,以筛选出同时存在性能问题和可靠性隐患的风机,为后续的检修与优化提供依据。`
+
+                this.basrMsgArr.forEach(it => {
+                    if (it.nameEn === "reportDate") {
+                        it.value = date[0] + '年' + date[1] + '月'
+                    } else {
+                        it.value = res.data.stationid[it.nameEn]
+                    }
+                })
+
+                this.orderMsgArr.forEach(it => {
+                    it.value = jsonData.orderMsg[it.nameEn]
+                })
+
+                this.fjsxList1 = res.data.xnwtls;
+                this.fjsxList2 = res.data.kkxwtls;
+                // 3.1筛选结果
+                for (const key in res.data.FilterResults) {
+                    if (Object.prototype.hasOwnProperty.call(res.data.FilterResults, key)) {
+                        const element = res.data.FilterResults[key];
+                        let obj = {
+                            windName: key,
+                            value: element
+                        }
+                        this.orderResultArr.push(obj)
+                    }
+                }
+                // 4风机情况说明
+                this.windSituationReport = res.data.qksm
+                // 5检修建议
+                this.maintenanceRecommendations = res.data.jxjy
+
+                this.conclusionMsg =
+                    `本次分析针对${res.data.stationid.aname}的风机发电能力下降及可靠性隐患进行了全面评估。通过实施短期和长期检修措施,预计将显著提高设备的发电效率和运行可靠性。`
+            },
+        },
+
+        watch: {
+            "$store.state.theme"(bool) {
+                this.theme = bool;
+            },
+        },
+    };
+</script>
+
+<style lang="less" scoped>
+    .optimizationSuggestions {
+        height: 100%;
+        display: flex;
+        flex-direction: column;
+        justify-content: flex-start;
+        align-content: center;
+
+        .main_top {
+            height: 40px;
+            display: flex;
+            align-items: center;
+
+            .topPsty {
+                position: relative;
+                top: 5px;
+                padding: 7px 20px;
+                font-size: 12px;
+                font-weight: 600;
+                margin-left: 10px;
+                border-radius: 3px;
+            }
+
+            .seach {
+                padding: 20px 0 0 20px;
+
+                .generat-seach {
+                    .el-form-item {
+                        .el-form-item__content {
+                            .el-select {
+                                width: 130px !important;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        .infoBox {
+            height: calc(100% - 80px);
+            background: #fff;
+            overflow: scroll;
+
+            #pdfDomop {
+                margin: 20px;
+            }
+        }
+
+        &.themeLight {
+            .topPsty {
+                color: #2778ff;
+                background: #ffffff;
+            }
+        }
+
+        &.themeDark {
+            .topPsty {
+                color: #1c99ff;
+                background: #1e2126;
+            }
+        }
+    }
+</style>
+<style lang="less">
+    .el-overlay {
+        .el-overlay-dialog {
+            .reportDia {
+                margin-top: 0 !important;
+            }
+        }
+    }
+
+    .reportDia {
+        .repoerDateBox {
+            width: calc(100% - 40px);
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-size: 12px;
+        }
+    }
+</style>

File diff suppressed because it is too large
+ 63 - 87
src/views/powerPrediction/component/homePageNoMap.json


+ 195 - 1
src/views/powerPrediction/component/statisticalSummary.json

@@ -199,7 +199,7 @@
         ]
     },
     "annualPowerGenerationReportData": {
-        "list": [
+        "list2": [
             {
                 "dataTime": null,
                 "theoreticalPower": null,
@@ -328,6 +328,200 @@
                 "november": 0.0,
                 "december": 0.0
             }
+        ],
+        "list": [
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 9472.26,
+                "february": 10492.0,
+                "march": 11190.0,
+                "april": 10808.0,
+                "may": 7301.58,
+                "june": 9750.0,
+                "july": 11155.0,
+                "august": 11325.0,
+                "september": 9557.0,
+                "october": 10304.0,
+                "november": 10225.0,
+                "december": 10703.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 11245.374,
+                "february": 8624.14,
+                "march": 13214.845,
+                "april": 12157.593,
+                "may": 13949.593,
+                "june": 11469.241,
+                "july": 8449.203,
+                "august": 11261.299,
+                "september": 14929.166,
+                "october": 12245.856,
+                "november": 2226.602,
+                "december": 0.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 0.0,
+                "november": 0.0,
+                "december": 0.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 0.0,
+                "november": 0.0,
+                "december": 0.0
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 68.99,
+                "november": 73.71,
+                "december": null
+            },
+            {
+                "dataTime": null,
+                "theoreticalPower": null,
+                "availablePower": null,
+                "actualPowerDq": null,
+                "veryShortTermForecastDq": null,
+                "shortTermForecastDq": null,
+                "actualPowerTq": null,
+                "veryShortTermForecastTq": null,
+                "shortTermForecastTq": null,
+                "actualPowerSy": null,
+                "veryShortTermForecastSy": null,
+                "shortTermForecastSy": null,
+                "actualWindSpeedDq": null,
+                "forecastWindSpeedDq": null,
+                "actualWindSpeedTq": null,
+                "forecastWindSpeedTq": null,
+                "actualWindSpeedSy": null,
+                "forecastWindSpeedSy": null,
+                "january": 0.0,
+                "february": 0.0,
+                "march": 0.0,
+                "april": 0.0,
+                "may": 0.0,
+                "june": 0.0,
+                "july": 0.0,
+                "august": 0.0,
+                "september": 0.0,
+                "october": 75.03,
+                "november": 79.65,
+                "december": null
+            }
         ]
     }
 }

File diff suppressed because it is too large
+ 9 - 13
src/views/powerPrediction/component/weather.json


+ 54 - 13
src/views/powerPrediction/homePageNoMap.vue

@@ -84,12 +84,18 @@
                         <div class="msgHeight">
                             <div v-for="(item, index) in messageDataxc" :key="index">
                                 <div style="display: flex">
+                                    <!-- <span class="stationSty">{{ item.name }}</span> -->
+                                    <!-- <span class="titleSty"
+                                        :style="{ color: item.data[0].color }">【{{ item.data[0].name }}】</span> -->
+                                    <!-- <span class="msgSty" @click="showDetail(item, index)">{{
+                    item.data[0].msg
+                  }}</span> -->
                                     <span class="stationSty">{{ item.name }}</span>
                                     <span class="titleSty"
-                                        :style="{ color: item.data[0].color }">【{{ item.data[0].name }}】</span>
-                                    <span class="msgSty" @click="showDetail(item, index)">{{
-                    item.data[0].msg
-                  }}</span>
+                                        :style="showColor(item.alertObj.alertTitle) ? 'color: red':'color:green'"
+                                        @click="showDetail(item, index)">【{{ item.alertObj.alertTitle }}】</span>
+                                    <span class="msgSty"
+                                        @click="showDetail(item, index)">{{item.alertObj.alertMessage}}</span>
                                 </div>
                                 <el-divider></el-divider>
                             </div>
@@ -204,6 +210,7 @@
                 planFiveMin: "",
                 currentTime: "",
                 warningData: [],
+                extremeWeather: [],
                 messageDataxc: [],
                 messageDataAll: [],
                 ExceedTimeList: [],
@@ -521,7 +528,7 @@
                 },
                 {
                     img: threeimg,
-                    name: "维护",
+                    name: "故障",
                     nameEn: "wh",
                     borderSty: "#E17D24",
                     backSty: "#694119",
@@ -585,7 +592,7 @@
                 },
                 {
                     img: threeimg1,
-                    name: "维护",
+                    name: "故障",
                     nameEn: "wh",
                     borderSty: "#F1AF74",
                     backSty: "#E17D24",
@@ -714,8 +721,8 @@
             },
         },
         mounted() {
-            // this.initPageData();
-            this.initPageFn()
+            this.initPageData();
+            // this.initPageFn()
         },
         beforeRouteLeave(to, from, next) {
             next();
@@ -831,7 +838,7 @@
                             let XaObj = {
                                 value: item,
                                 textStyle: {
-                                    width: 100,
+                                    width: 120,
                                     height: 25,
                                     backgroundColor: "#edeffb",
                                     color: "#36348e",
@@ -866,6 +873,7 @@
 
                     {
                         that.messageDataxc = [];
+                        that.extremeWeather = jsonData.weatherForecastAllTerminalData
                         jsonData.weatherForecastAllTerminalData.forEach((item) => {
                             let weatherDataFromWeb = null;
                             weatherDataFromWeb = JSON.parse(item.content);
@@ -902,8 +910,29 @@
                         }
                     });
                     that.allStatus = jsonData.unitStatusInfoAllData;
+                    console.log("extremeWeather===>>>", that.extremeWeather)
+
+                    that.messageDataxc.forEach(item => {
+                        that.extremeWeather.forEach(it => {
+                            if (item.name === it.terminalName) {
+                                let obj = {
+                                    alertTitle: it.alertTitle ? it.alertTitle : item.data[0].name,
+                                    alertMessage: it.alertMessage ? it.alertMessage : item.data[0]
+                                        .msg
+                                }
+                                item.alertObj = obj
+                            }
+                        })
+                    })
+                    console.log("messageDataxc===>>>321", that.messageDataxc)
                 }
             },
+            showColor(str) {
+                return str.indexOf("预警") !== -1
+            },
+            showTitle(item) {
+                return item.substring(0, item.indexOf('发布') + 2)
+            },
             statusSty(item) {
                 return `border: 1px solid ${item.borderSty};background: ${item.backSty}`;
             },
@@ -1045,6 +1074,7 @@
                 apiGetallWeatherInfo().then((datas) => {
                     if (datas && datas.data) {
                         that.messageDataxc = [];
+                        that.extremeWeather = datas.data
                         datas.data.forEach((item) => {
                             let weatherDataFromWeb = null;
                             weatherDataFromWeb = JSON.parse(item.content);
@@ -1055,7 +1085,7 @@
             },
             //处理每个场站天气数据
             everyStationWeather(weatherDataFromWeb, stationName) {
-                console.log("weatherDataFromWeb", weatherDataFromWeb);
+                // console.log("weatherDataFromWeb", weatherDataFromWeb);
                 let weatherTit = {
                     windBlue: 0,
                     windYellow: 0,
@@ -1269,8 +1299,19 @@
                         "N"
                     );
                 }
-                console.log("weatherTit", weatherTit);
-                console.log("messageDataxc", this.messageDataxc);
+                // console.log("weatherTit", weatherTit);
+                this.messageDataxc.forEach(item => {
+                    this.extremeWeather.forEach(it => {
+                        if (item.name === it.terminalName) {
+                            let obj = {
+                                alertTitle: it.alertTitle,
+                                alertMessage: it.alertMessage
+                            }
+                            item.alertObj = obj
+                        }
+                    })
+                })
+                console.log("messageDataxc===>>>123>", this.messageDataxc);
             },
             //获取天气预警的相关天气数据
             getOnlyWeatherData(datas, weather, obj, type) {
@@ -1842,7 +1883,7 @@
                                 let XaObj = {
                                     value: item,
                                     textStyle: {
-                                        width: 100,
+                                        width: 120,
                                         height: 25,
                                         backgroundColor: "#edeffb",
                                         color: "#36348e",

+ 1 - 1
src/views/powerPrediction/powerPredictionPage.vue

@@ -839,7 +839,7 @@
                     timeType: type,
                     // itemVal: this.itemVal,
                     itemVal: 0,
-                    leadTime: 7,
+                    leadTime: 0
                 };
                 apiGetglobalPowerCharts(params).then((datas) => {
                     if (datas && datas.data) {

+ 37 - 6
src/views/powerPrediction/statisticalSummaryPage.vue

@@ -47,11 +47,11 @@
                                 <el-table :data="tableData" border style="width: 100%"
                                     element-loading-background="rgba(0,0,0,.5)"
                                     :header-cell-style="{ 'text-align': 'center' }">
-                                    <el-table-column prop="name" label="月份" align="center" fixed>
+                                    <el-table-column prop="name" label="月份" width="90" align="center" fixed>
                                     </el-table-column>
-                                    <el-table-column prop="statistic" label="合计" align="right" fixed>
+                                    <el-table-column prop="statistic" width="90" label="合计" align="right" fixed>
                                     </el-table-column>
-                                    <el-table-column :prop="item.value" width="73" align="right" :label="item.name"
+                                    <el-table-column :prop="item.value" align="right" :label="item.name"
                                         v-for="(item, index) in tableColumn" :key="index">
                                     </el-table-column>
                                 </el-table>
@@ -99,7 +99,7 @@
             },
         },
         created() {
-            // this.initPageData();
+            this.initPageData();
             // this.getStationData();
             (this.pieColor = [{
                     value: "",
@@ -294,7 +294,7 @@
                     let monthLen = 0;
                     monthLen = new Date().getMonth() + 1;
                     // 表格数据处理
-                    that.getTableData(jsonData.annualPowerGenerationReportData.list);
+                    that.getTableData2(jsonData.annualPowerGenerationReportData.list);
                     // 柱状图数据处理
                     that.getBarData(
                         jsonData.annualPowerGenerationReportData.list,
@@ -406,7 +406,7 @@
                         let monthLen = 0;
                         monthLen = new Date().getMonth() + 1;
                         // 表格数据处理
-                        that.getTableData(datas.data.list);
+                        that.getTableData2(datas.data.list);
                         // 柱状图数据处理
                         that.getBarData(datas.data.list, monthLen);
                         //饼状图数据处理
@@ -509,6 +509,37 @@
                 datas[5].statistic = (num3 / num).toFixed(2) * 100 + "%";
                 this.tableData = datas;
             },
+            getTableData2(datas) {
+                let nameArr = ["计划发电", "实际发电", "当月占比", "全年占比", "短期准确率", "超短准确率"]
+                let monthName = [
+                    "january",
+                    "february",
+                    "march",
+                    "april",
+                    "may",
+                    "june",
+                    "july",
+                    "august",
+                    "september",
+                    "october",
+                    "november",
+                    "december",
+                ];
+                datas.forEach((it, idx) => {
+                    let statisticNum = 0
+                    it.name = nameArr[idx]
+                    monthName.forEach(o => {
+                        if (it[o] !== null) {
+                            it[o] = Number(it[o].toFixed(2))
+                            statisticNum = statisticNum + it[o]
+                        } else {
+                            statisticNum = statisticNum + 0
+                        }
+                    })
+                    it.statistic = statisticNum.toFixed(2)
+                })
+                this.tableData = datas;
+            },
             //处理当年月发电量柱状图数据
             getBarData(datas, val) {
                 let xAxisAll = [

+ 142 - 6
src/views/powerPrediction/weatherPage.vue

@@ -81,15 +81,48 @@
                         <div id="weatherChart" :style="linerightChartStyle"></div>
                         <div class="messageData">
                             <p style="margin-bottom: 30px">温馨提示:</p>
+                            <!-- <div class="tabMain">
+                                <div class="extremeMsg">
+                                    <div class="extremeW" :style="havePicPos(item.alertObj.alertTitle)"></div>
+                                    <div class="tabMain_msg">
+                                        <div class="detailsTimesv">
+                                            <div class="detailN">
+                                                <span>极端天气预警:</span>
+                                                <span
+                                                    :style="haveColor(item.alertObj.alertTitle)">{{item.alertObj.alertTitle}};</span>
+                                            </div>
+                                        </div>
+
+                                        <div class="detailsTime">
+                                            <div class="detailN">
+                                                <span>温度:</span>
+                                                <span>{{item.weatherDetail.temperature_day || item.weatherDetail.temperature}}℃;</span>
+                                            </div>
+                                            <div class="detailN">
+                                                <span>湿度:</span>
+                                                <span>{{item.weather.humidity}}%;</span>
+                                            </div>
+                                            <div class="detailN">
+                                                <span>气压:</span>
+                                                <span>{{item.weather.pressure}}kPa;</span>
+                                            </div>
+                                            <div class="detailN">
+                                                <span>风力:</span>
+                                                <span>{{item.weather.wind_power}};</span>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="detailsMsg">{{item.alertObj.alertMessage}}</div>
+                            </div> -->
                             <div style="display: flex">
                                 <div class="msgDiv">
-                                    <div v-for="(item, index) in showMsgData" :key="item.id">
+                                    <div v-for="item in showMsgData" :key="item.id">
                                         <div style="display: flex">
                                             <span class="titleSty"
                                                 :style="{ color: item.data[0].color }">【{{ item.data[0].name }}】</span>
-                                            <span class="msgSty" @click="clickDetail(item, index)">{{
-                        item.data[0].msg
-                      }}</span>
+                                            <!-- @click="clickDetail(item, index)" -->
+                                            <span class="msgSty">{{item.data[0].msg}}</span>
                                         </div>
                                         <el-divider></el-divider>
                                     </div>
@@ -147,6 +180,7 @@
     } from "../../api/api";
 
     import jsonData from "./component/weather.json";
+    import picPosJson from '../../components/powerPredictionComponent/homePageAssembly/weatherPicPos.json'
     export default {
         components: {
             // commonHeader
@@ -154,6 +188,9 @@
         },
         data() {
             return {
+                //天气与图片位置对应
+                weaPic: picPosJson.data,
+                extremeWeather: [],
                 windTurbines: "",
                 windName: "",
                 windFramoptions: [],
@@ -398,8 +435,8 @@
             ];
         },
         mounted() {
-            // this.initPageData();
-            this.getWindFramData();
+            this.initPageData();
+            // this.getWindFramData();
         },
         computed: {
             pageHeight() {
@@ -438,6 +475,7 @@
                 that.windTurbines = jsonData.glStationsAllData.list[0].no;
                 that.windFramoptions[0].showBac = true;
                 that.windName = jsonData.glStationsAllData.list[0].stationName;
+                that.extremeWeather = jsonData.weatherForecastData
 
                 if (jsonData.weatherForecastData.length > 1) {
                     jsonData.weatherForecastData.forEach((item) => {
@@ -670,6 +708,10 @@
                     );
                     that.init();
                 }
+
+
+                console.log("weather123321====>>>>", that.showMsgData)
+                console.log("extremeWeather55665====>>>>", that.extremeWeather)
             },
             init() {
                 this.detailWeather =
@@ -749,6 +791,24 @@
                 this.getWeatherLine1();
                 this.getWeatherLine2();
             },
+            haveColor(title) {
+                let str = 'margin-left:5px;font-weight: 600;color:'
+                this.weaPic.forEach(it => {
+                    if (title.indexOf(it.name) != -1) {
+                        str += it.status
+                    }
+                })
+                return str
+            },
+            havePicPos(title) {
+                let str = 'background-position:'
+                this.weaPic.forEach(it => {
+                    if (title.indexOf(it.name) != -1) {
+                        str += it.position
+                    }
+                })
+                return str
+            },
             // 获取风电场数据
             getWindFramData() {
                 let that = this;
@@ -777,6 +837,11 @@
                 this.detailWeather = item.data[0];
                 this.$refs.weatherDetail.dialogVisible = true;
                 this.$refs.weatherDetail.title = "天气详情";
+                let obj = {
+                    alertTitle: this.extremeWeather.alertTitle,
+                    alertMessage: this.extremeWeather.alertMessage
+                }
+                this.showMsgData.alertObj = obj
                 this.$refs.weatherDetail.messageAll = this.showMsgData;
                 this.$refs.weatherDetail.activeName = index.toString();
                 this.$refs.weatherDetail.statusName = item.data[0].name;
@@ -2000,6 +2065,77 @@
                             margin: 12px 0 15px 0;
                         }
                     }
+
+                    .tabMain {
+                        padding-right: 20px;
+
+                        .extremeMsg {
+                            display: flex;
+                            margin-bottom: 10px;
+
+                            .extremeW {
+                                margin: 15px 0 0 20px;
+                                width: 110px;
+                                height: 100px;
+                                background-image: url(../../assets/weather/extremeWeather.png);
+                            }
+
+
+                            .tabMain_msg {
+                                margin: 22px 0 0 10px;
+
+                                .detailsTimesv {
+                                    margin-bottom: 20px;
+                                    font-size: 18px;
+                                    display: flex;
+                                    justify-content: start;
+
+                                    .detailN {
+                                        margin-right: 20px;
+
+                                        span:nth-of-type(1) {
+                                            font-weight: bold;
+                                        }
+                                    }
+                                }
+
+                            }
+
+                        }
+
+
+                        .detailsMsg {
+                            overflow-y: auto;
+                            height: 230px;
+                            font-size: 18px;
+                            line-height: 30px;
+                            text-indent: 2em;
+                            padding-left: 30px;
+                        }
+
+
+                        img {
+                            width: 180px;
+                            height: 180px;
+                            margin: 30px 0 0 20px;
+                        }
+
+                    }
+
+                    .detailsTime {
+                        display: flex;
+                        justify-content: end;
+                        margin-top: 10px;
+                        font-size: 18px;
+
+                        .detailN {
+                            margin-right: 20px;
+
+                            span:nth-of-type(1) {
+                                font-weight: bold;
+                            }
+                        }
+                    }
                 }
             }
 

+ 7 - 2
src/viewsCss/homePageNoMapLess.less

@@ -158,19 +158,24 @@
                     .stationSty {
                         margin-left: 5px;
                         display: inline-block;
-                        width: 50px;
+                        width: 100px;
                         font-weight: 600;
                     }
 
                     .titleSty {
                         display: inline-block;
+                        width: 140px;
                         // width: 60px;
                         font-weight: 600;
+
+                        &:hover {
+                            text-decoration-line: underline;
+                        }
                     }
 
                     .msgSty {
                         display: inline-block;
-                        width: calc(90% - 110px);
+                        width: calc(90% - 240px);
                         overflow: hidden;
                         text-overflow: ellipsis;
                         white-space: nowrap;