潘志宝
2024-10-31 13c97d76348b5451381320aa54efa0706f38ecb6
提交 | 用户 | 时间
031c25 1 <template>
D 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>
14         <el-date-picker
15           v-model="dataForm.startTime"
16           type="datetime"
17           value-format="yyyy-MM-dd HH:mm:ss"
18           placeholder="选择日期时间"
19        />
20       </el-form-item>
21       <el-form-item>
22         <el-date-picker
23           v-model="dataForm.endTime"
24           type="datetime"
25           value-format="yyyy-MM-dd HH:mm:ss"
26           placeholder="选择日期时间"
27         />
28       </el-form-item>
29       <el-form-item>
30         <el-button @click="getDataList()">查询</el-button>
31       </el-form-item>
32       <el-form-item>
33         <el-button
34           type="success"
35           plain
36           @click="handleExport"
37           :loading="exportLoading"
38           v-hasPermi="['data:point:export']"
39         >
40           <Icon icon="ep:download" />导出
41         </el-button>
42       </el-form-item>
43     </el-form>
44     <div ref="chartDom" class="result-chart"></div>
45   </el-dialog>
46 </template>
47
48 <script lang="ts" setup>
49   import {ref} from 'vue';
50   import * as echarts from 'echarts';
51   import * as DaPoint from '@/api/data/da/point/daPointChart'
52   import download from "@/utils/download";
53   const message = useMessage() // 消息弹窗
54   const visible = ref(false);
55   const chartDom = ref(null);
56   let myChart = null;
57   const dataForm = ref({
58     id: "",
59     pointNo: "",
60     pointName: "",
61     pointTypeName: "",
62     startTime: getYMDHMS(),
63     endTime: undefined,
64   });
65   const queryParams = reactive({
c4b4d2 66     codes: [],
67     startDate: undefined,
68     endDate: undefined,
031c25 69   })
D 70   function getYMDHMS() {
71     let timestamp = new Date().getTime();
72     let time = new Date(timestamp - 1000 * 60 * 30);
73     let year = time.getFullYear();
74     let month = (time.getMonth() + 1).toString();
75     let date = time.getDate().toString();
76     let hours = time.getHours().toString();
77     let minute = time.getMinutes().toString();
78
79     if (month < 10) {
80       month = "0" + month;
81     }
82     if (date < 10) {
83       date = "0" + date;
84     }
85     if (hours < 10) {
86       hours = "0" + hours;
87     }
88     if (minute < 10) {
89       minute = "0" + minute;
90     }
91     return (
92       year +
93       "-" +
94       month +
95       "-" +
96       date +
97       " " +
98       hours +
99       ":" +
100       minute +
101       ":" +
102       "00"
103     );
104   }
105   /** 打开弹窗 */
106   const open = async (row: object) => {
107     visible.value = true
108     dataForm.value.id = row.id;
109     dataForm.value.pointNo = row.pointNo;
110     dataForm.value.pointName = row.pointName;
111     dataForm.value.startTime = getYMDHMS();
112     dataForm.value.endTime = "";
113     getDataList();
114   }
115
116   defineExpose({open}) // 提供 open 方法,用于打开弹窗
117
118   async function getDataList() {
119     visible.value = true;
120     if (dataForm.value.id) {
121       try {
c4b4d2 122         queryParams.codes=[dataForm.value.pointNo];
123         queryParams.startDate = dataForm.value.startTime;
124         queryParams.endDate = dataForm.value.endTime;
031c25 125         const data = await DaPoint.getPointDaChart(queryParams)
c4b4d2 126         let seriesData = []
127         data.series.forEach(item => {
128           seriesData.push({
129             name: item.name,
130             type: "line",
131             data: item.data,
132             showSymbol: true,
133             smooth: false,
134             lineStyle: {
135               normal: {
136                 color: "#5B8FF9",
137                 width: 1,
138               },
031c25 139             },
c4b4d2 140           });
141         })
142
031c25 143         myChart = echarts.init(chartDom.value);
D 144         const option = {
145           title: {
146             text: dataForm.value.pointName,
147             top: 0,
148             left: "1%",
149             textStyle: {
150               fontSize: 14,
151             },
152           },
153           tooltip: {
154             trigger: "axis",
155             axisPointer: {
156               type: "line",
157               lineStyle: {
158                 color: "#cccccc",
159                 width: "1",
160                 type: "dashed",
161               },
162             },
163           },
164           legend: {
165             show: false,
166             top: 10,
167           },
168           grid: {
169             top: 30,
170             left: "3%",
171             right: "5%",
172             bottom: 10,
173             containLabel: true,
174           },
175           xAxis: {
176             type: "category",
177             boundaryGap: false,
c4b4d2 178             data: data.categories,
031c25 179           },
D 180           yAxis: {
181             type: "value",
182           },
183           dataZoom: [
184             {
185               type: "inside",
186             },
187           ],
188           series: seriesData,
189         };
190         myChart.setOption(option);
191       } catch (error) {
192         console.error(error)
193       }
194     }
195   }
196   /** 导出按钮操作 */
197   const exportLoading = ref(false)
198   const handleExport = async () => {
199     queryParams.pointNos=[dataForm.value.pointNo];
200     queryParams.start = dataForm.value.startTime;
201     queryParams.end = dataForm.value.endTime;
202     try {
203       // 导出的二次确认
204       await message.exportConfirm()
205       // 发起导出
206       exportLoading.value = true
207       const data = await DaPoint.exportDaPointValue(queryParams)
208       download.excel(data, dataForm.value.pointName +'.xls')
209     } catch {
210     } finally {
211       exportLoading.value = false
212     }
213   }
214 </script>
215 <style>
216   .el-select {
217     width: 100%;
218   }
219
220   .result-chart {
221     height: 500px;
222   }
223 </style>