From 328968f75a4dd4292ebc71f01d759a824765ac72 Mon Sep 17 00:00:00 2001
From: Jay <csj123456>
Date: 星期五, 22 十一月 2024 10:00:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/model/pre/item/MmPredictItemChart.vue |  253 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 253 insertions(+), 0 deletions(-)

diff --git a/src/views/model/pre/item/MmPredictItemChart.vue b/src/views/model/pre/item/MmPredictItemChart.vue
new file mode 100644
index 0000000..a0f867a
--- /dev/null
+++ b/src/views/model/pre/item/MmPredictItemChart.vue
@@ -0,0 +1,253 @@
+<template>
+  <el-dialog
+    title="预测数据"
+    :close-on-click-modal="false"
+    width="50%"
+    v-model="visible"
+  >
+    <el-form
+      :inline="true"
+      :model="dataForm"
+      @keydown.enter="getDataList()"
+    >
+      <el-form-item label="开始时间">
+        <el-date-picker
+          size="mini"
+          v-model="dataForm.startTime"
+          format="YYYY-MM-DD HH:mm:00"
+          value-format="YYYY-MM-DD HH:mm:00"
+          type="datetime"
+          :clearable="false"
+          placeholder="选择日期时间"/>
+      </el-form-item>
+      <el-form-item label="结束时间">
+        <el-date-picker
+          size="mini"
+          v-model="dataForm.endTime"
+          format="YYYY-MM-DD HH:mm:00"
+          value-format="YYYY-MM-DD HH:mm:00"
+          type="datetime"
+          :clearable="false"
+          placeholder="选择日期时间"/>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="getDataList()">查询</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+        >
+          <Icon icon="ep:download"/>
+          导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+    <div ref="chartDomPre" class="result-chart"></div>
+  </el-dialog>
+</template>
+
+<script lang="ts" setup>
+import {ref} from 'vue';
+import * as echarts from 'echarts';
+import * as McsApi from '@/api/model/mcs'
+import {getYMDHM0} from "@/utils/dateUtil"
+import download from "@/utils/download";
+
+const message = useMessage() // 消息弹窗
+const visible = ref(false);
+const chartDomPre = ref(null);
+let myChart = null;
+const chartParams = reactive({
+  itemId: undefined,
+  startTime: undefined,
+  endTime: undefined,
+})
+const dataForm = ref({
+  id: "",
+  itemName: "",
+  startTime: getYMDHM0(new Date() - 60 * 60 * 1000),
+  endTime: getYMDHM0(new Date() + 60 * 60 * 1000),
+});
+
+/** 打开弹窗 */
+const open = async (row: object) => {
+  visible.value = true
+  resetForm()
+  dataForm.value.id = row.id;
+  dataForm.value.itemName = row.itemname;
+  if (row.id) {
+    getDataList();
+  }
+}
+
+defineExpose({open}) // 提供 open 方法,用于打开弹窗
+
+async function getDataList() {
+  visible.value = true;
+  if (dataForm.value.id) {
+    try {
+      chartParams.itemId = dataForm.value.id;
+      chartParams.startTime = dataForm.value.startTime;
+      chartParams.endTime = dataForm.value.endTime;
+      const data = await McsApi.getPreDataItemChart(chartParams)
+      let legendData = []
+      if (data.legend && data.legend.length > 0) {
+        data.legend.forEach(item => {
+          legendData.push(item + ":" + '真实值')
+          legendData.push(item + ":" + '预测值')
+        })
+      }
+
+      let seriesData = []
+      if (data.predictTime) {
+        seriesData.push({
+          name: '',
+          data: [null],
+          type: 'line',
+          smooth: true,
+          color: 'green',
+          markLine: {
+            silent: true,
+            lineStyle: {
+              color: '#32a487',
+              width: 2
+            },
+            data: [{
+              xAxis: data.predictTime
+            }],
+            label: {
+              normal: {
+                formatter: data.predictTime
+              }
+            },
+            symbol: ['circle', 'none'],
+          },
+        });
+      }
+
+      if (data.viewMap) {
+        Object.keys(data.viewMap).forEach(key => {
+          let viewData = data.viewMap[key]
+          seriesData.push({
+            name: key + ":" + '真实值',
+            type: "line",
+            data: viewData.realData,
+            showSymbol: false,
+            smooth: false,
+            lineStyle: {
+              normal: {
+                width: 1,
+              },
+            },
+          })
+          seriesData.push({
+            name: key + ":" + '预测值',
+            type: "line",
+            data: viewData.preDataN,
+            showSymbol: false,
+            smooth: false,
+            lineStyle: {
+              normal: {
+                width: 1,
+              },
+            },
+          })
+        })
+      }
+
+      myChart = echarts.init(chartDomPre.value);
+      const option = {
+        title: {
+          text: dataForm.value.itemName,
+          top: 0,
+          left: "1%",
+          textStyle: {
+            fontSize: 14,
+          },
+        },
+        tooltip: {
+          trigger: "axis",
+          axisPointer: {
+            type: "line",
+            lineStyle: {
+              color: "#cccccc",
+              width: "1",
+              type: "dashed",
+            },
+          },
+        },
+        legend: {
+          show: true,
+          top: 20,
+          data: legendData
+        },
+        grid: {
+          top: "20%",
+          left: "3%",
+          right: "5%",
+          bottom: 10,
+          containLabel: true,
+        },
+        xAxis: {
+          type: "category",
+          boundaryGap: false,
+          data: data.categories,
+        },
+        yAxis: {
+          type: "value",
+        },
+        dataZoom: [
+          {
+            type: "inside",
+          },
+        ],
+        series: seriesData,
+      };
+      myChart.setOption(option);
+    } catch (error) {
+      console.error(error)
+    }
+  }
+}
+
+/** 导出按钮操作 */
+const exportLoading = ref(false)
+const handleExport = async () => {
+  chartParams.itemId = dataForm.value.id;
+  chartParams.startTime = dataForm.value.startTime?dataForm.value.startTime:"";
+  chartParams.endTime = dataForm.value.endTime?dataForm.value.endTime:"";
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await McsApi.exportPredictValue(chartParams)
+    download.excel(data, dataForm.value.itemName + '.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  dataForm.value = {
+    id: undefined,
+    itemName: undefined,
+    startTime: undefined,
+    endTime: undefined
+  }
+}
+</script>
+<style>
+.el-select {
+  width: 100%;
+}
+
+.result-chart {
+  height: 500px;
+}
+</style>

--
Gitblit v1.9.3