|
@@ -1,7 +1,7 @@
|
|
|
<!--
|
|
|
* @Author: your name
|
|
|
* @Date: 2024-05-29 09:14:23
|
|
|
- * @LastEditTime: 2024-09-18 14:11:06
|
|
|
+ * @LastEditTime: 2024-09-20 14:46:38
|
|
|
* @LastEditors: bogon
|
|
|
* @Description: In User Settings Edit
|
|
|
* @FilePath: /performance-test/src/views/performance/components/EditAnalysis.vue
|
|
@@ -65,52 +65,8 @@
|
|
|
description="暂无分析任何数据,无法进行手动分析描述"
|
|
|
></el-empty>
|
|
|
<el-card v-if="!noData" shadow="always" class="box-card">
|
|
|
- <el-row>
|
|
|
+ <el-row class="assetssConent">
|
|
|
<!-- {{ generalFilesData }} -->
|
|
|
- <template v-for="(powerCurveDom, ind) in generalFilesData">
|
|
|
- <el-col
|
|
|
- :span="12"
|
|
|
- v-if="
|
|
|
- form.configAnalysis === 'power_curve'
|
|
|
- // ||
|
|
|
- // form.configAnalysis === 'cp'
|
|
|
- "
|
|
|
- ><div class="left">
|
|
|
- <el-button>导出csv文件</el-button>
|
|
|
-
|
|
|
- <el-table
|
|
|
- :data="powerCurveDom && powerCurveDom.powerCurveTableData[0]"
|
|
|
- border
|
|
|
- max-height="550"
|
|
|
- style="width: 100%"
|
|
|
- align="center"
|
|
|
- >
|
|
|
- <el-table-column prop="enginName" label="风机名称">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="engineTypeName" label="风机机型">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="xData" label="风速"> </el-table-column>
|
|
|
- <el-table-column prop="yData" label="合同功率">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="contractPowerCurve" label="实际功率">
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- <el-col
|
|
|
- v-loading="htmlLoading"
|
|
|
- v-if="form.configAnalysis === 'power_curve'"
|
|
|
- :span="12"
|
|
|
- >
|
|
|
- <div class="right">
|
|
|
- <PlotlyCharts
|
|
|
- :lineMarkerData="powerCurveDom.chartsData"
|
|
|
- :comType="'generalDrawing'"
|
|
|
- ></PlotlyCharts>
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- </template>
|
|
|
-
|
|
|
<el-col
|
|
|
:span="24"
|
|
|
v-if="form.configAnalysis === 'yaw_error' && this.csvData.length > 0"
|
|
@@ -196,103 +152,320 @@
|
|
|
</el-col>
|
|
|
|
|
|
<!-- 其他类型展示的 图表 ,只展示图表不必要展示表格 -->
|
|
|
- <!-- <el-col v-loading="htmlLoading" v-else :span="24">
|
|
|
- <div class="right">
|
|
|
- <PlotlyCharts></PlotlyCharts>
|
|
|
- </div>
|
|
|
- </el-col> -->
|
|
|
- <el-col
|
|
|
- :span="12"
|
|
|
- v-if="
|
|
|
- form.configAnalysis !== 'yaw_error' &&
|
|
|
- form.configAnalysis !== 'power_curve'
|
|
|
- "
|
|
|
- ><div class="left">
|
|
|
- <div>
|
|
|
- <span>机组名称:</span>
|
|
|
- <el-select
|
|
|
- v-model="engineCode"
|
|
|
- placeholder="请选择机组名称"
|
|
|
- size="small"
|
|
|
- clearable
|
|
|
- @change="handleEngineCode"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="(item, indWind) in windEngineGroupList"
|
|
|
- :key="item.engineCode + indWind"
|
|
|
- :label="item.engineName"
|
|
|
- :value="item.engineCode"
|
|
|
- ></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- 1.额定容量:{{
|
|
|
- windDetail.ratedCapacity ? windDetail.ratedCapacity : 0
|
|
|
- }}
|
|
|
- <span> (kW)</span>
|
|
|
- </div>
|
|
|
- <div>2.风机编号:{{ windDetail.engineCode }}</div>
|
|
|
- <div>3.经度(Longitude):{{ windDetail.longitude }}</div>
|
|
|
- <div>4.维度(Dimensionality):{{ windDetail.latitude }}</div>
|
|
|
- <div>
|
|
|
- 5.海拔高度(Altitude):{{
|
|
|
- windDetail.elevationHeight ? windDetail.elevationHeight : 0
|
|
|
- }}
|
|
|
- <span>(米)</span>
|
|
|
- </div>
|
|
|
- <div>6.风机名称:{{ windDetail.engineName }}</div>
|
|
|
- <div>
|
|
|
- 7.是否标杆(Benchmarking or not):{{
|
|
|
- windDetail.sightcing == 1 ? "是" : "否"
|
|
|
- }}
|
|
|
- </div>
|
|
|
- <div>8.风场编号:{{ windDetail.fieldCode }}</div>
|
|
|
- <div>
|
|
|
- 9.轮毂高度:{{ windDetail.hubHeight ? windDetail.hubHeight : 0 }}
|
|
|
- <span>(米)</span>
|
|
|
+
|
|
|
+ <template v-if="form.configAnalysis === 'power_curve'">
|
|
|
+ <el-col :span="24">
|
|
|
+ <div
|
|
|
+ style="font-weight: 700; font-size: 16px"
|
|
|
+ v-if="generalFilesData.length > 0 || powerHtmlZongData.length > 0"
|
|
|
+ >
|
|
|
+ 分析总图:
|
|
|
</div>
|
|
|
- <div>10.机型编号:{{ windDetail.millTypeCode }}</div>
|
|
|
- <div>
|
|
|
- 11.切入风速:{{
|
|
|
- windDetail.ratedCutInWindspeed
|
|
|
- ? windDetail.ratedCutInWindspeed
|
|
|
- : 0
|
|
|
- }}<span>(m/s)</span>
|
|
|
+ </el-col>
|
|
|
+ <template
|
|
|
+ v-if="generalFilesData[0] !== null && generalFilesData.length !== 0"
|
|
|
+ >
|
|
|
+ <template v-for="(powerCurveDom, ind) in generalFilesData">
|
|
|
+ <el-col
|
|
|
+ :span="12"
|
|
|
+ v-if="
|
|
|
+ form.configAnalysis === 'power_curve'
|
|
|
+ // ||
|
|
|
+ // form.configAnalysis === 'cp'
|
|
|
+ "
|
|
|
+ ><div class="left">
|
|
|
+ <el-button
|
|
|
+ @click="
|
|
|
+ downLoadCsv(
|
|
|
+ powerCurveDom && powerCurveDom.powerCurveTableData
|
|
|
+ )
|
|
|
+ "
|
|
|
+ >导出表格数据</el-button
|
|
|
+ >
|
|
|
+
|
|
|
+ <el-table
|
|
|
+ :data="powerCurveDom && powerCurveDom.powerCurveTableData"
|
|
|
+ border
|
|
|
+ max-height="550"
|
|
|
+ style="width: 100%"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <el-table-column prop="enginName" label="风机名称">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="engineTypeName" label="风机机型">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="xData" label="风速">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="yData" label="合同功率">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="contractPowerCurve" label="实际功率">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col
|
|
|
+ v-loading="htmlLoading"
|
|
|
+ v-if="form.configAnalysis === 'power_curve'"
|
|
|
+ :span="12"
|
|
|
+ >
|
|
|
+ <div class="right">
|
|
|
+ <PlotlyCharts
|
|
|
+ :lineMarkerData="powerCurveDom.chartsData"
|
|
|
+ :comType="'generalDrawing'"
|
|
|
+ ></PlotlyCharts>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ <template v-if="powerHtmlZongData.length > 0">
|
|
|
+ <el-col
|
|
|
+ v-for="(file, index) in powerHtmlZongData"
|
|
|
+ :key="index + file.fileAddr + file.createTime"
|
|
|
+ :span="24"
|
|
|
+ class="col_content"
|
|
|
+ :style="{
|
|
|
+ display:
|
|
|
+ getFileType(file.fileAddr) === 'html' ? 'block' : 'none',
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <iframe
|
|
|
+ v-if="getFileType(file.fileAddr) === 'html'"
|
|
|
+ :src="file.fileAddr"
|
|
|
+ :ref="'iframe' + index"
|
|
|
+ frameborder="0"
|
|
|
+ @load="iframeLoad(index + powerHtmlZongData.length)"
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ ></iframe>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ <el-col :span="24">
|
|
|
+ <div
|
|
|
+ style="font-weight: 700; font-size: 16px"
|
|
|
+ v-if="graphFilesData.length > 0 || powerHtmlFenData.length > 0"
|
|
|
+ >
|
|
|
+ 分析分图:
|
|
|
</div>
|
|
|
- <div>
|
|
|
- 12.切出风速:{{
|
|
|
- windDetail.ratedCutOutWindspeed
|
|
|
- ? windDetail.ratedCutOutWindspeed
|
|
|
- : 0
|
|
|
- }}<span>(m/s)</span>
|
|
|
+ </el-col>
|
|
|
+ <template
|
|
|
+ v-if="graphFilesData[0] !== null && graphFilesData.length !== 0"
|
|
|
+ >
|
|
|
+ <template v-for="(powerCurveDom, ind) in graphFilesData">
|
|
|
+ <el-col
|
|
|
+ v-loading="htmlLoading"
|
|
|
+ v-if="form.configAnalysis === 'power_curve'"
|
|
|
+ :span="12"
|
|
|
+ >
|
|
|
+ <div class="left">
|
|
|
+ <el-table
|
|
|
+ :data="powerCurveDom && powerCurveDom.powerCurveTableData"
|
|
|
+ border
|
|
|
+ max-height="550"
|
|
|
+ style="width: 100%"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <el-table-column prop="enginName" label="风机名称">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="engineTypeName" label="风机机型">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="xData" label="风速">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="yData" label="合同功率">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="contractPowerCurve" label="实际功率">
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col
|
|
|
+ v-loading="htmlLoading"
|
|
|
+ v-if="form.configAnalysis === 'power_curve'"
|
|
|
+ :span="12"
|
|
|
+ >
|
|
|
+ <div class="right">
|
|
|
+ <PlotlyCharts
|
|
|
+ :lineMarkerData="powerCurveDom.chartsData"
|
|
|
+ :comType="'graph'"
|
|
|
+ ></PlotlyCharts>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ <template v-if="powerHtmlFenData.length > 0">
|
|
|
+ <el-col
|
|
|
+ v-for="(file, index) in powerHtmlFenData"
|
|
|
+ :key="index + file.fileAddr + file.createTime"
|
|
|
+ :span="24"
|
|
|
+ class="col_content"
|
|
|
+ :style="{
|
|
|
+ display:
|
|
|
+ getFileType(file.fileAddr) === 'html' ? 'block' : 'none',
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <iframe
|
|
|
+ v-if="getFileType(file.fileAddr) === 'html'"
|
|
|
+ :src="file.fileAddr"
|
|
|
+ :ref="'iframe' + index"
|
|
|
+ frameborder="0"
|
|
|
+ @load="iframeLoad(index + powerHtmlFenData.length)"
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ ></iframe>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <!-- <el-col :span="24" v-if="form.configAnalysis !== 'yaw_error'"> -->
|
|
|
+ <!-- <div class="left">
|
|
|
+ <div>
|
|
|
+ <span>机组名称:</span>
|
|
|
+ <el-select
|
|
|
+ v-model="engineCode"
|
|
|
+ placeholder="请选择机组名称"
|
|
|
+ size="small"
|
|
|
+ clearable
|
|
|
+ @change="handleEngineCode"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, indWind) in windEngineGroupList"
|
|
|
+ :key="item.engineCode + indWind"
|
|
|
+ :label="item.engineName"
|
|
|
+ :value="item.engineCode"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 1.额定容量:{{
|
|
|
+ windDetail.ratedCapacity ? windDetail.ratedCapacity : 0
|
|
|
+ }}
|
|
|
+ <span> (kW)</span>
|
|
|
+ </div>
|
|
|
+ <div>2.风机编号:{{ windDetail.engineCode }}</div>
|
|
|
+ <div>3.经度(Longitude):{{ windDetail.longitude }}</div>
|
|
|
+ <div>4.维度(Dimensionality):{{ windDetail.latitude }}</div>
|
|
|
+ <div>
|
|
|
+ 5.海拔高度(Altitude):{{
|
|
|
+ windDetail.elevationHeight ? windDetail.elevationHeight : 0
|
|
|
+ }}
|
|
|
+ <span>(米)</span>
|
|
|
+ </div>
|
|
|
+ <div>6.风机名称:{{ windDetail.engineName }}</div>
|
|
|
+ <div>
|
|
|
+ 7.是否标杆(Benchmarking or not):{{
|
|
|
+ windDetail.sightcing == 1 ? "是" : "否"
|
|
|
+ }}
|
|
|
+ </div>
|
|
|
+ <div>8.风场编号:{{ windDetail.fieldCode }}</div>
|
|
|
+ <div>
|
|
|
+ 9.轮毂高度:{{
|
|
|
+ windDetail.hubHeight ? windDetail.hubHeight : 0
|
|
|
+ }}
|
|
|
+ <span>(米)</span>
|
|
|
+ </div>
|
|
|
+ <div>10.机型编号:{{ windDetail.millTypeCode }}</div>
|
|
|
+ <div>
|
|
|
+ 11.切入风速:{{
|
|
|
+ windDetail.ratedCutInWindspeed
|
|
|
+ ? windDetail.ratedCutInWindspeed
|
|
|
+ : 0
|
|
|
+ }}<span>(m/s)</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ 12.切出风速:{{
|
|
|
+ windDetail.ratedCutOutWindspeed
|
|
|
+ ? windDetail.ratedCutOutWindspeed
|
|
|
+ : 0
|
|
|
+ }}<span>(m/s)</span>
|
|
|
+ </div>
|
|
|
+ </div> -->
|
|
|
+ <!-- </el-col> -->
|
|
|
+ <template
|
|
|
+ v-if="
|
|
|
+ form.configAnalysis !== 'yaw_error' &&
|
|
|
+ form.configAnalysis !== 'power_curve'
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <el-col :span="24">
|
|
|
+ <div
|
|
|
+ style="font-weight: 700; font-size: 16px"
|
|
|
+ v-if="generalFiles.length > 0"
|
|
|
+ >
|
|
|
+ 分析总图:
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col
|
|
|
+ v-for="(file, index) in generalFiles"
|
|
|
+ :key="index + file.fileAddr + file.createTime"
|
|
|
+ :span="24"
|
|
|
+ class="col_content"
|
|
|
+ :style="{
|
|
|
+ display:
|
|
|
+ getFileType(file.fileAddr) === 'html' ? 'block' : 'none',
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <iframe
|
|
|
+ v-if="getFileType(file.fileAddr) === 'html'"
|
|
|
+ :src="file.fileAddr"
|
|
|
+ :ref="'iframe' + index"
|
|
|
+ frameborder="0"
|
|
|
+ @load="iframeLoad(index + generalFiles.length)"
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ ></iframe>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <div
|
|
|
+ style="font-weight: 700; font-size: 16px"
|
|
|
+ v-if="diagramRelations.length > 0"
|
|
|
+ >
|
|
|
+ 分析分图:
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col
|
|
|
+ v-for="(file, index) in diagramRelations"
|
|
|
+ :key="index + file.fileAddr + file.createTime"
|
|
|
+ :span="24"
|
|
|
+ :style="{
|
|
|
+ display:
|
|
|
+ getFileType(file.fileAddr) === 'html' ? 'block' : 'none',
|
|
|
+ }"
|
|
|
+ class="col_content"
|
|
|
+ >
|
|
|
+ <iframe
|
|
|
+ v-if="getFileType(file.fileAddr) === 'html'"
|
|
|
+ :src="file.fileAddr"
|
|
|
+ :ref="'iframe' + index + diagramRelations.length"
|
|
|
+ frameborder="0"
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ @load="iframeLoad(index + diagramRelations.length)"
|
|
|
+ ></iframe>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <!-- <el-col
|
|
|
+ :span="12"
|
|
|
+ v-loading="htmlLoading"
|
|
|
+ v-if="form.configAnalysis !== 'yaw_error'"
|
|
|
+ >
|
|
|
+ <div class="right">
|
|
|
+ <iframe
|
|
|
+ v-if="htmlLoading"
|
|
|
+ :src="windDetail.elevationHeight"
|
|
|
+ frameborder="0"
|
|
|
+ @load="iframeLoad"
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ ></iframe>
|
|
|
+ <img
|
|
|
+ v-else
|
|
|
+ style="width: 100%"
|
|
|
+ src="../../../assets/img/loadingError.webp"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- <el-col
|
|
|
- :span="12"
|
|
|
- v-loading="htmlLoading"
|
|
|
- v-if="
|
|
|
- form.configAnalysis !== 'yaw_error' &&
|
|
|
- form.configAnalysis !== 'power_curve'
|
|
|
- "
|
|
|
- >
|
|
|
- <div class="right">
|
|
|
- <iframe
|
|
|
- v-if="htmlLoading"
|
|
|
- :src="windDetail.elevationHeight"
|
|
|
- frameborder="0"
|
|
|
- @load="iframeLoad"
|
|
|
- width="100%"
|
|
|
- height="100%"
|
|
|
- ></iframe>
|
|
|
- <img
|
|
|
- v-else
|
|
|
- style="width: 100%"
|
|
|
- src="../../../assets/img/loadingError.webp"
|
|
|
- alt=""
|
|
|
- />
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
+ </el-col> -->
|
|
|
+ </template>
|
|
|
</el-row>
|
|
|
</el-card>
|
|
|
<el-empty :image-size="200" v-if="flage"></el-empty>
|
|
@@ -366,6 +539,7 @@ import {
|
|
|
import { getWindEngineGroup } from "@/api/ledger";
|
|
|
import TinymceEditor from "@/components/Tinymce.vue";
|
|
|
import PlotlyCharts from "./PlotlyCharts.vue";
|
|
|
+import { downLoadCsvFile } from "@/utils/common";
|
|
|
import Papa from "papaparse";
|
|
|
import axios from "axios";
|
|
|
export default {
|
|
@@ -391,6 +565,8 @@ export default {
|
|
|
trigger: "blur",
|
|
|
},
|
|
|
},
|
|
|
+ generalFiles: [], //总图数组
|
|
|
+ diagramRelations: [], //分图数组
|
|
|
value4: "",
|
|
|
value1: "",
|
|
|
form: {
|
|
@@ -414,6 +590,9 @@ export default {
|
|
|
tabIndex: 2,
|
|
|
powerCurveTableData: [],
|
|
|
generalFilesData: [],
|
|
|
+ graphFilesData: [],
|
|
|
+ powerHtmlZongData: [],
|
|
|
+ powerHtmlFenData: [],
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
@@ -505,6 +684,19 @@ export default {
|
|
|
} else {
|
|
|
this.flage = false;
|
|
|
}
|
|
|
+ this.generalFiles = [];
|
|
|
+ this.generalFiles =
|
|
|
+ (response.data &&
|
|
|
+ response.data.length > 0 &&
|
|
|
+ response.data[0].generalFiles) ||
|
|
|
+ [];
|
|
|
+
|
|
|
+ this.diagramRelations = [];
|
|
|
+ this.diagramRelations =
|
|
|
+ (response.data &&
|
|
|
+ response.data.length > 0 &&
|
|
|
+ response.data[0].diagramRelations) ||
|
|
|
+ [];
|
|
|
if (
|
|
|
response.data.length > 0 &&
|
|
|
response.data[0].commentTypeRelations &&
|
|
@@ -524,41 +716,99 @@ export default {
|
|
|
}
|
|
|
//有功功率的数据处理
|
|
|
if (this.form.configAnalysis === "power_curve") {
|
|
|
- const generalFiles = response.data[0].generalFiles || [];
|
|
|
- const generalFilesData = await Promise.all(
|
|
|
- generalFiles.map(async (item, ind) => {
|
|
|
- const types = this.getFileType(item.fileAddr);
|
|
|
-
|
|
|
- if (types !== "html" && types !== "image") {
|
|
|
- const resultChartsData = await axios.get(item.fileAddr);
|
|
|
- // 更新表格数据
|
|
|
+ try {
|
|
|
+ this.generalFilesData = [];
|
|
|
+ this.graphFilesData = [];
|
|
|
+ const generalFiles = response.data[0]?.generalFiles || [];
|
|
|
+ this.powerHtmlZongData = [];
|
|
|
+ this.powerHtmlFenData = [];
|
|
|
+ // 处理 generalFiles 并获取每个文件的数据
|
|
|
+ const generalFilesData = await this.filterJsonData(
|
|
|
+ generalFiles,
|
|
|
+ "总图"
|
|
|
+ );
|
|
|
+ //分图数据
|
|
|
+ const graphChartData = await this.filterJsonData(
|
|
|
+ response.data[0].diagramRelations,
|
|
|
+ "分图"
|
|
|
+ );
|
|
|
+ // 过滤掉 null 或没有 chartsData 的项
|
|
|
+ this.generalFilesData = generalFilesData.filter(
|
|
|
+ (item) => item && item.chartsData
|
|
|
+ );
|
|
|
+ this.graphFilesData = graphChartData.filter(
|
|
|
+ (item) => item && item.chartsData
|
|
|
+ );
|
|
|
+ } catch (error) {
|
|
|
+ console.error("Error processing power curve data:", error);
|
|
|
+ } finally {
|
|
|
+ // 无论请求成功与否,都设置 loading = false
|
|
|
+ this.loading = false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果 configAnalysis 不是 "power_curve",直接设置 loading = false
|
|
|
+ this.loading = false;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error);
|
|
|
+ this.loading = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async filterJsonData(generalFiles, type) {
|
|
|
+ return Promise.all(
|
|
|
+ generalFiles.map(async (item, ind) => {
|
|
|
+ const types = this.getFileType(item.fileAddr);
|
|
|
+ if (types !== "html" && types !== "image") {
|
|
|
+ try {
|
|
|
+ const resultChartsData = await axios.get(item.fileAddr);
|
|
|
+ // 更新表格数据,并返回数据对象
|
|
|
+ if (type === "总图") {
|
|
|
+ return {
|
|
|
+ chartsData: {
|
|
|
+ ...resultChartsData.data,
|
|
|
+ },
|
|
|
+ powerCurveTableData: this.creatPowerCurveTableData(
|
|
|
+ resultChartsData.data
|
|
|
+ ).filter((val) => val !== undefined),
|
|
|
+ // .filter(
|
|
|
+ // (item) => item[0]?.enginCode === this.form.turbines
|
|
|
+ // ),
|
|
|
+ };
|
|
|
+ } else if (type === "分图") {
|
|
|
return {
|
|
|
chartsData: {
|
|
|
...resultChartsData.data,
|
|
|
+ formInfoFieldEngineCode: this.form.turbines,
|
|
|
},
|
|
|
powerCurveTableData: this.creatPowerCurveTableData(
|
|
|
resultChartsData.data
|
|
|
)
|
|
|
.filter((val) => val !== undefined)
|
|
|
- .filter((item) => item[0].enginName === this.form.turbines),
|
|
|
+ .filter(
|
|
|
+ (item) =>
|
|
|
+ item?.enginName === this.form.turbines ||
|
|
|
+ item?.enginCode === this.form.turbines
|
|
|
+ ),
|
|
|
};
|
|
|
}
|
|
|
- // 确保总是返回一个对象,即使条件不满足
|
|
|
- return {}; // 或者返回 null
|
|
|
- })
|
|
|
- );
|
|
|
-
|
|
|
- // 在 await 之后进行过滤,过滤掉没有 chartsData 的项
|
|
|
- this.generalFilesData = generalFilesData.filter(
|
|
|
- (item) => item && item.chartsData
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- this.loading = false;
|
|
|
- } catch (error) {
|
|
|
- console.error(error);
|
|
|
- this.loading = false;
|
|
|
- }
|
|
|
+ } catch (error) {
|
|
|
+ console.error(
|
|
|
+ `Error fetching chart data for file: ${item.fileAddr}`,
|
|
|
+ error
|
|
|
+ );
|
|
|
+ return null; // 如果出错,返回 null 以避免中断
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (type === "总图") {
|
|
|
+ this.powerHtmlZongData.push(item);
|
|
|
+ } else if (type === "分图") {
|
|
|
+ this.powerHtmlFenData.push(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果文件类型不匹配,返回一个空对象
|
|
|
+ return null;
|
|
|
+ })
|
|
|
+ );
|
|
|
},
|
|
|
getFileType(url) {
|
|
|
// 使用 URL 对象解析 URL
|
|
@@ -591,6 +841,7 @@ export default {
|
|
|
// 合同功率曲线[...]---合同功率
|
|
|
// enginName--风机名称
|
|
|
// engineTypeName--风机机型
|
|
|
+
|
|
|
const contractPowerCurve =
|
|
|
data && data.data.filter((item) => item.enginName === "合同功率曲线");
|
|
|
const powerCurveTableData =
|
|
@@ -609,6 +860,7 @@ export default {
|
|
|
item.yData[childInd] !== null ? item.yData[childInd] : 0.0,
|
|
|
contractPowerCurve: contractPowerCurve[0].yData[childInd],
|
|
|
enginName: item.enginName,
|
|
|
+ enginCode: item.enginCode,
|
|
|
engineTypeName: data.engineTypeName,
|
|
|
};
|
|
|
}
|
|
@@ -617,8 +869,11 @@ export default {
|
|
|
return childData;
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
- return powerCurveTableData;
|
|
|
+ // console.log(
|
|
|
+ // powerCurveTableData.flat(),
|
|
|
+ // "powerCurveTableDatapowerCurveTableData"
|
|
|
+ // );
|
|
|
+ return powerCurveTableData.flat();
|
|
|
},
|
|
|
getCsvData(url) {
|
|
|
// 使用 axios 获取 CSV 文件
|
|
@@ -647,6 +902,25 @@ export default {
|
|
|
console.error("无法获取 CSV 文件:", error);
|
|
|
});
|
|
|
},
|
|
|
+ downLoadCsv(tableDatas) {
|
|
|
+ const headers = ["风机名称", "风机机型", "风速", "合同功率", "实际功率"]; // CSV 文件的标题
|
|
|
+ const data = tableDatas.map((item) => {
|
|
|
+ return [
|
|
|
+ item.enginName,
|
|
|
+ item.engineTypeName,
|
|
|
+ item.xData,
|
|
|
+ item.yData,
|
|
|
+ item.contractPowerCurve,
|
|
|
+ ];
|
|
|
+ });
|
|
|
+ // 将标题和数据组合成 CSV 格式
|
|
|
+ const csvContent = [
|
|
|
+ headers.join(","),
|
|
|
+ ...data.map((row) => row.join(",")),
|
|
|
+ ].join("\n");
|
|
|
+
|
|
|
+ downLoadCsvFile(csvContent, "风机有功功率数据");
|
|
|
+ },
|
|
|
mergeData(arr, brr) {
|
|
|
// 创建一个新的结果数组
|
|
|
const result = [];
|
|
@@ -851,4 +1125,7 @@ export default {
|
|
|
.abalysisType {
|
|
|
margin-top: 30px;
|
|
|
}
|
|
|
+.col_content {
|
|
|
+ height: 500px;
|
|
|
+}
|
|
|
</style>
|