|
@@ -1,17 +1,323 @@
|
|
|
<!--
|
|
|
* @Author: your name
|
|
|
* @Date: 2025-01-09 18:10:22
|
|
|
- * @LastEditTime: 2025-01-10 09:17:58
|
|
|
+ * @LastEditTime: 2025-01-20 09:28:43
|
|
|
* @LastEditors: bogon
|
|
|
* @Description: In User Settings Edit
|
|
|
* @FilePath: /performance-test/src/views/overview/components/power_scatter/index.vue
|
|
|
-->
|
|
|
+
|
|
|
<template>
|
|
|
- <div>逐月有功功率散点3D分析</div>
|
|
|
+ <div class="type-variable">
|
|
|
+ <!-- 逐月有功功率散点3D分析--只有分图不存在总图 -->
|
|
|
+ <div class="left">
|
|
|
+ <FilterChart
|
|
|
+ :windList="windEngineGroupList"
|
|
|
+ @getEnfineList="getEnfineList"
|
|
|
+ @handlePrevious="handlePrevious"
|
|
|
+ @handleNext="handleNext"
|
|
|
+ ></FilterChart>
|
|
|
+ <el-alert type="info" :closable="false">
|
|
|
+ <template v-slot:title>
|
|
|
+ <div style="display: flex; align-items: center">
|
|
|
+ <i
|
|
|
+ class="el-icon-info"
|
|
|
+ style="font-size: 20px; margin-right: 5px"
|
|
|
+ ></i>
|
|
|
+ <h3>分析说明:</h3>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div style="font-size: 12px; margin-top: 10px">
|
|
|
+ 动态偏航误差分析是对机组偏航对风角度的分布情况进行统计及可视化展示,对风角度分布对称性较差的机组需要关注其偏航系统对风异常原因。
|
|
|
+ </div>
|
|
|
+ </el-alert>
|
|
|
+ <div class="titleCharts">分析分图 :</div>
|
|
|
+ <VirtualList
|
|
|
+ :list="diagramRelationsDatas"
|
|
|
+ keyField="fieldEngineCode"
|
|
|
+ :itemSize="452"
|
|
|
+ v-slot="{ item, index }"
|
|
|
+ >
|
|
|
+ <DDrawingChart
|
|
|
+ :key="item.fieldEngineCode"
|
|
|
+ :index="index"
|
|
|
+ :ref="item.fieldEngineCode"
|
|
|
+ :fileAddr="item.fileAddr"
|
|
|
+ >
|
|
|
+ </DDrawingChart>
|
|
|
+ </VirtualList>
|
|
|
+
|
|
|
+ <el-tabs value="first">
|
|
|
+ <el-tab-pane label="意见描述" name="first">
|
|
|
+ <TinymceEditor
|
|
|
+ ref="editor"
|
|
|
+ v-model="comment"
|
|
|
+ @input="handleEditorInput($event)"
|
|
|
+ @onClick="onClick"
|
|
|
+ >
|
|
|
+ </TinymceEditor>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ <el-row type="flex" class="row-bg" justify="end">
|
|
|
+ <el-col :span="2" style="margin: 20px">
|
|
|
+ <el-button type="primary" size="small" @click="handleComment"
|
|
|
+ >提交评论</el-button
|
|
|
+ >
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <div class="right">
|
|
|
+ <DicCard
|
|
|
+ :batchCode="initBatchCode"
|
|
|
+ :analysisTypeCode="analysisTypeCode"
|
|
|
+ :commentDescriptionVos="commentDescriptionVos"
|
|
|
+ >
|
|
|
+ </DicCard>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
<script>
|
|
|
+import DicCard from "@/views/overview/components/dicCard/index.vue";
|
|
|
+import FilterChart from "@/views/overview/components/filterChart/index.vue";
|
|
|
+import DDrawingChart from "@/views/performance/components/chartsCom/3DDrawingChart.vue";
|
|
|
+import TinymceEditor from "@/components/Tinymce.vue";
|
|
|
+import { analysisDetail, queryAnalysisedEngine } from "@/api/performance";
|
|
|
+
|
|
|
export default {
|
|
|
name: "powerScatter",
|
|
|
+ components: {
|
|
|
+ DicCard,
|
|
|
+ FilterChart,
|
|
|
+ DDrawingChart,
|
|
|
+ TinymceEditor,
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ initBatchCode: {
|
|
|
+ default: "",
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ analysisTypeCode: {
|
|
|
+ default: "",
|
|
|
+ type: String,
|
|
|
+ },
|
|
|
+ batchCodeList: {
|
|
|
+ default: "",
|
|
|
+ type: Array,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ form: {
|
|
|
+ value2: "",
|
|
|
+ },
|
|
|
+ windEngineGroupList: [], //批次风机列表
|
|
|
+ fieldEngineCodes: [], //选中风机
|
|
|
+ comment: "",
|
|
|
+ options: [],
|
|
|
+ generalFilesDatas: [], //总图
|
|
|
+ diagramRelationsDatas: [], //分图,
|
|
|
+ requestResult: [], // 请求结果
|
|
|
+ requestRecord: [],
|
|
|
+ commentDescriptionVos: [], //评论列表
|
|
|
+ editableTabs: [],
|
|
|
+ };
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ initBatchCode(newVal) {
|
|
|
+ if (newVal) {
|
|
|
+ this.fetchData(); // 调用合并后的函数
|
|
|
+ }
|
|
|
+ },
|
|
|
+ analysisTypeCode(newVal) {
|
|
|
+ if (newVal) {
|
|
|
+ this.fetchData(); // 调用合并后的函数
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ if (this.initBatchCode && this.analysisTypeCode) {
|
|
|
+ this.fetchData(); // 调用合并后的函数
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async handleComment() {
|
|
|
+ try {
|
|
|
+ await analysisCommentEdit({
|
|
|
+ batchCode: this.initBatchCode,
|
|
|
+ analysisTypeCode: this.analysisTypeCode,
|
|
|
+ commentList: this.editableTabs.map((item) => {
|
|
|
+ return {
|
|
|
+ commentTypeCode: item.commentTypeCode,
|
|
|
+ comment: item.commentTypeName === "分析评论" ? this.comment : "",
|
|
|
+ };
|
|
|
+ }),
|
|
|
+ });
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "保存成功",
|
|
|
+ });
|
|
|
+ this.comment = "";
|
|
|
+ this.getAnalysisDetail();
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e);
|
|
|
+ this.loading = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getResult({ index, result }) {
|
|
|
+ console.log(index, result);
|
|
|
+ this.$set(this.requestResult, index, result);
|
|
|
+ // this.requestResult[index] = result
|
|
|
+ this.requestRecord[index] = result;
|
|
|
+ },
|
|
|
+ changeRequestNum(index) {
|
|
|
+ if (index <= 1) {
|
|
|
+ this.$set(this.requestRecord, index, "start");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (index > 1) {
|
|
|
+ if (
|
|
|
+ this.requestRecord.every((item) =>
|
|
|
+ ["success", "error"].includes(item)
|
|
|
+ )
|
|
|
+ ) {
|
|
|
+ this.$set(this.requestRecord, index, "start");
|
|
|
+ this.$set(this.requestResult, index, "start");
|
|
|
+ } else {
|
|
|
+ this.$set(this.requestRecord, index, "start");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onSubmit() {
|
|
|
+ console.log("submit!");
|
|
|
+ },
|
|
|
+ // 合并后的函数,处理数据请求
|
|
|
+ async fetchData() {
|
|
|
+ try {
|
|
|
+ console.log(
|
|
|
+ this.initBatchCode,
|
|
|
+ this.analysisTypeCode,
|
|
|
+ "请求详情 分钟级"
|
|
|
+ );
|
|
|
+ // 获取分析详情
|
|
|
+ await this.getAnalysisDetail();
|
|
|
+
|
|
|
+ // 获取风机列表
|
|
|
+ await this.getWindEnfineList(this.initBatchCode, this.analysisTypeCode);
|
|
|
+ } catch (err) {
|
|
|
+ console.error("Failed to fetch data:", err);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 获取分析详情接口
|
|
|
+ async getAnalysisDetail() {
|
|
|
+ try {
|
|
|
+ const result = await analysisDetail({
|
|
|
+ batchCode: this.initBatchCode,
|
|
|
+ analysisTypeCode: this.analysisTypeCode,
|
|
|
+ fieldEngineCodes:
|
|
|
+ this.fieldEngineCodes.length === 0
|
|
|
+ ? undefined
|
|
|
+ : this.fieldEngineCodes.join(","),
|
|
|
+ });
|
|
|
+ if (
|
|
|
+ result.data &&
|
|
|
+ result.data[0] &&
|
|
|
+ result.data[0].commentTypeRelations
|
|
|
+ ) {
|
|
|
+ this.editableTabs = result.data[0].commentTypeRelations;
|
|
|
+ }
|
|
|
+ //当前评论展示获取
|
|
|
+ if (
|
|
|
+ result.data &&
|
|
|
+ result.data[0] &&
|
|
|
+ result.data[0].commentDescriptionVos
|
|
|
+ ) {
|
|
|
+ this.commentDescriptionVos = result.data[0].commentDescriptionVos;
|
|
|
+ }
|
|
|
+ this.generalFilesDatas =
|
|
|
+ result.data &&
|
|
|
+ result.data[0] &&
|
|
|
+ result.data[0].generalFiles &&
|
|
|
+ result.data[0].generalFiles.filter((item) =>
|
|
|
+ item.fileAddr.endsWith(".json")
|
|
|
+ ); //总图数据
|
|
|
+ this.diagramRelationsDatas =
|
|
|
+ result.data &&
|
|
|
+ result.data[0] &&
|
|
|
+ result.data[0].diagramRelations.filter((item) =>
|
|
|
+ item.fileAddr.endsWith(".json")
|
|
|
+ );
|
|
|
+ } catch (err) {
|
|
|
+ console.error("Failed to fetch analysis details:", err);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 请求风机列表
|
|
|
+ async getWindEnfineList(batchCode, analysisTypeCode) {
|
|
|
+ // console.log("请求风机列表 分钟级");
|
|
|
+ const resEngineList = await queryAnalysisedEngine({
|
|
|
+ batchCode: batchCode,
|
|
|
+ analysisTypeCode,
|
|
|
+ });
|
|
|
+ this.windEngineGroupList = resEngineList.data;
|
|
|
+ },
|
|
|
+ handleEditorInput(index, newVal) {
|
|
|
+ // 更新对应的 comment 值
|
|
|
+ // 如果该功能没有实现,可以删除这个方法
|
|
|
+ },
|
|
|
+ //获取选中风机list
|
|
|
+ getEnfineList(data) {
|
|
|
+ this.fieldEngineCodes = data;
|
|
|
+ this.getAnalysisDetail();
|
|
|
+ },
|
|
|
+ //下一条
|
|
|
+ handleNext() {
|
|
|
+ const index = this.batchCodeList.findIndex(
|
|
|
+ (item) => item === this.initBatchCode
|
|
|
+ );
|
|
|
+ if (index === this.batchCodeList.length - 1) {
|
|
|
+ this.$message.warning("已经是最后一个分析结果了");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.$emit("setInitBathCode", this.batchCodeList[index + 1]);
|
|
|
+ },
|
|
|
+ //上一条
|
|
|
+ handlePrevious() {
|
|
|
+ const index = this.batchCodeList.findIndex(
|
|
|
+ (item) => item === this.initBatchCode
|
|
|
+ );
|
|
|
+ if (index === 0) {
|
|
|
+ this.$message.warning("没有上一条了");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.$emit("setInitBathCode", this.batchCodeList[index - 1]);
|
|
|
+ },
|
|
|
+ onClick() {},
|
|
|
+ },
|
|
|
};
|
|
|
</script>
|
|
|
-<style scoped lang="scss"></style>
|
|
|
+<style scoped lang="scss">
|
|
|
+.type-variable {
|
|
|
+ display: flex;
|
|
|
+ height: 90%;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ .left {
|
|
|
+ width: 30%;
|
|
|
+ height: 100%;
|
|
|
+ overflow: auto;
|
|
|
+ padding: 20px;
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .right {
|
|
|
+ width: 250px;
|
|
|
+ height: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+}
|
|
|
+.titleCharts {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ margin-top: 20px;
|
|
|
+}
|
|
|
+</style>
|