Jay
2025-02-19 331bbbc6604426763876ef55403b6f60cc22bf04
提交 | 用户 | 时间
331bbb 1 <template>
J 2   <el-dialog
3     title="历史值"
4     :close-on-click-modal="false"
5     width="50%"
6     v-model="visible"
7   >
8     <el-form
9       :inline="true"
10       :model="dataForm"
11       @keydown.enter="getDataList()"
12     >
13       <el-form-item label="开始时间">
14         <el-date-picker
15           size="mini"
16           v-model="dataForm.startTime"
17           format="YYYY-MM-DD HH:mm:00"
18           value-format="YYYY-MM-DD HH:mm:00"
19           type="datetime"
20           :clearable="false"
21           placeholder="选择日期时间"/>
22       </el-form-item>
23       <el-form-item label="结束时间">
24         <el-date-picker
25           size="mini"
26           v-model="dataForm.endTime"
27           format="YYYY-MM-DD HH:mm:00"
28           value-format="YYYY-MM-DD HH:mm:00"
29           type="datetime"
30           :clearable="false"
31           placeholder="选择日期时间"/>
32       </el-form-item>
33       <el-form-item>
34         <el-button @click="getDataList()">查询</el-button>
35       </el-form-item>
36     </el-form>
37     <div ref="chartDom" class="result-chart" v-loading="loading"></div>
38   </el-dialog>
39 </template>
40
41 <script lang="ts" setup>
42 import {ref} from 'vue';
43 import * as echarts from 'echarts';
44 import * as ItemApi from '@/api/data/ind/item/item'
45 import {getYMDHM0} from "@/utils/dateUtil"
46 import download from "@/utils/download";
47
48 const message = useMessage() // 消息弹窗
49 const visible = ref(false);
50 const chartDom = ref(null);
51 let myChart = null;
52 const chartParams = reactive({
53   itemNo: undefined,
54   startTime: undefined,
55   endTime: undefined,
56 })
57 const dataForm = ref({
58   id: "",
59   itemNo: "",
60   itemName: "",
61   startTime: getYMDHM0(new Date() - 60 * 60 * 1000),
62   endTime: "",
63 });
64
65 /** 打开弹窗 */
66 const open = async (row: object) => {
67   visible.value = true
68   dataForm.value.id = row.id;
69   dataForm.value.itemNo = row.itemNo;
70   dataForm.value.itemName = row.itemName;
71   getDataList();
72 }
73
74 defineExpose({open}) // 提供 open 方法,用于打开弹窗
75
76 const loading = ref(false)
77
78 async function getDataList() {
79   visible.value = true;
80   loading.value = true
81   if (dataForm.value.id) {
82     try {
83       chartParams.itemNo = dataForm.value.itemNo;
84       chartParams.startTime = dataForm.value.startTime;
85       chartParams.endTime = dataForm.value.endTime;
86       const result = await ItemApi.getItemValueData(chartParams)
87       loading.value = false
88       let xData = result.map(obj => obj['dataTime']);
89       let yData = result.map(obj => obj['dataValue']);
90       let data = xData.map((x, index) => [x, yData[index]]);
91       let seriesData = []
92       seriesData.push({
93         name: dataForm.value.itemName,
94         type: "line",
95         data: data,
96         showSymbol: true,
97         smooth: false,
98         lineStyle: {
99           normal: {
100             color: "#5B8FF9",
101             width: 1,
102           },
103         },
104       });
105
106       myChart = echarts.init(chartDom.value);
107       const option = {
108         title: {
109           text: dataForm.value.itemName,
110           top: 0,
111           left: "1%",
112           textStyle: {
113             fontSize: 14,
114           },
115         },
116         tooltip: {
117           trigger: "axis",
118           axisPointer: {
119             type: "line",
120             lineStyle: {
121               color: "#cccccc",
122               width: "1",
123               type: "dashed",
124             },
125           },
126         },
127         legend: {
128           show: false,
129           top: 10,
130         },
131         grid: {
132           top: 30,
133           left: "3%",
134           right: "5%",
135           bottom: 10,
136           containLabel: true,
137         },
138         xAxis: {
139           type: "category",
140           boundaryGap: false,
141           data: xData,
142         },
143         yAxis: {
144           type: "value",
145         },
146         dataZoom: [
147           {
148             type: "inside",
149           },
150         ],
151         series: seriesData,
152       };
153       myChart.setOption(option);
154     } catch (error) {
155       console.error(error)
156     }
157   }
158 }
159
160 </script>
161 <style>
162 .el-select {
163   width: 100%;
164 }
165
166 .result-chart {
167   height: 500px;
168 }
169 </style>