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