From 1cdc1565130a5dd1f3d946baf4508066449231d5 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期二, 11 二月 2025 13:40:59 +0800 Subject: [PATCH] 自动播放 --- src/views/model/pre/analysis/index.vue | 196 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 153 insertions(+), 43 deletions(-) diff --git a/src/views/model/pre/analysis/index.vue b/src/views/model/pre/analysis/index.vue index de15ab9..c7bddd8 100644 --- a/src/views/model/pre/analysis/index.vue +++ b/src/views/model/pre/analysis/index.vue @@ -1,23 +1,29 @@ <template> <el-card shadow="never" class="aui-card--fill"> <div class="mod-his__index"> - <el-form :inline="true" :model="formData" label-width="80px"> + <el-form :inline="true" :model="formData" label-width="70px"> <el-form-item label="开始时间"> <el-date-picker v-model="formData.startTime" type="datetime" + format="YYYY-MM-DD HH:mm:00" + value-format="YYYY-MM-DD HH:mm:00" placeholder="选择日期时间"/> </el-form-item> <el-form-item label="结束时间"> <el-date-picker v-model="formData.endTime" type="datetime" + format="YYYY-MM-DD HH:mm:00" + value-format="YYYY-MM-DD HH:mm:00" placeholder="选择日期时间"/> </el-form-item> <el-form-item label="预测时间"> <el-date-picker v-model="formData.predictTime" type="datetime" + format="YYYY-MM-DD HH:mm:00" + value-format="YYYY-MM-DD HH:mm:00" placeholder="选择日期时间"/> </el-form-item> <el-form-item label="预测频率"> @@ -27,13 +33,25 @@ </el-form-item> <el-form-item> <el-button-group> - <el-button type="primary" plain :icon="ArrowLeft" - v-loading="loading1" @click="leftSearchDataByRange()"/> + <el-button type="primary" plain :icon="DArrowLeft" + :loading="loading1" @click="leftSearchDataByRange()"/> <el-button type="primary" plain :icon="Search" - v-loading="loading1" @click="getList()">查询 + :loading="loading1" @click="getList()">查询 </el-button> - <el-button type="primary" plain :icon="ArrowRight" - v-loading="loading1" @click="rightSearchDataByRange()"/> + <el-button type="primary" plain :icon="DArrowRight" + :loading="loading1" @click="rightSearchDataByRange()"/> + </el-button-group> + </el-form-item> + <el-form-item> + <el-button-group> + <el-button type="primary" plain :icon="CaretLeft" + @click="playChart(true)"/> + <el-button type="primary" plain :icon="VideoPlay" v-if="!isPlay" + @click="playHandle('play')"/> + <el-button type="primary" plain :icon="VideoPause" v-if="isPlay" + @click="playHandle('pause')"/> + <el-button type="primary" plain :icon="CaretRight" + @click="playChart(false)"/> </el-button-group> </el-form-item> @@ -52,18 +70,19 @@ </div> <div class="his-body-right"> <div class="his-body-chart"> - <el-form :inline="true" :model="calRateForm" :rules="formRules" ref="calRateForm" + <el-form :inline="true" :model="calRateForm" :rules="formRules" ref="calRateFormRef" label-width="108px"> <el-row> <el-col :span="6"> <el-form-item label="预测项" prop="calItem" style="width: 90%"> - <el-select size="small" v-model="calRateForm.calItem" @change="calItemBaseVale" + <el-select size="small" v-model="calRateForm.calItem" + @change="calItemBaseVale" placeholder="请选择"> <el-option - v-for="item in formData.checkedItemData" - :key="item.id" - :label="item.label" - :value="item.id"/> + v-for="itemOut in formData.checkedItemData" + :key="itemOut.id" + :label="itemOut.label" + :value="itemOut.id"/> </el-select> </el-form-item> </el-col> @@ -180,9 +199,7 @@ import {getYMDHMS} from "@/utils/dateUtil" import * as McsApi from '@/api/model/mcs' import * as echarts from "echarts"; -import {onMounted, ref} from 'vue'; -import {Search, ArrowLeft, ArrowRight,} from '@element-plus/icons-vue' -import {getPreDataCharts, getPredictItemTree} from "@/api/model/mcs"; +import {Search, DArrowLeft, DArrowRight, VideoPlay, VideoPause, CaretLeft, CaretRight} from '@element-plus/icons-vue' defineOptions({name: 'AnalysisformData'}) @@ -218,10 +235,11 @@ queryStep: 2, isMultipleYRadio: '单坐标轴', isMultipleY: false, - predictFreq: 3, + predictFreq: 2, }) -let calRateForm = ref({ - calItem: '', +const calRateFormRef = ref() +const calRateForm = ref({ + calItem: undefined, IN_DEVIATION: 0, OUT_DEVIATION: 0, IN_ACCURACY_RATE: 0, @@ -244,6 +262,7 @@ const itemDataObject = ref() const timer = ref() let myChart = null; +const isPlay = ref(false) const formRules = reactive({ calItem: [{required: true, message: '预测项不能为空', trigger: 'blur'}], @@ -252,7 +271,7 @@ }) /** 查询列表 */ -const getList = async () => { +const getList = async (isClear = true) => { loading1.value = true try { if (!formData.value.chartCheck) { @@ -355,7 +374,7 @@ }) offset = offset + 40 if (chartCheckArray.indexOf('真实值') !== -1) { - let legendName = dataView.resultstr + '(真实)'; + let legendName = dataView.resultName + '(真实)'; legendData.push(legendName); seriesData.push({ name: legendName, @@ -363,28 +382,29 @@ type: 'line', yAxisIndex: yAxisIndex, showSymbol: false, - smooth: true, + smooth: false, lineStyle: { width: 2 } }); } if (chartCheckArray.indexOf('T+N') !== -1) { - let legendName = dataView.resultstr + '(T+N)'; + let legendName = dataView.resultName + '(T+N)'; + legendData.push(legendName); seriesData.push({ name: legendName, data: dataView.preDataN || [], type: 'line', yAxisIndex: yAxisIndex, showSymbol: false, - smooth: true, + smooth: false, lineStyle: { width: 2 } }); } if (chartCheckArray.indexOf('T+L') !== -1) { - let legendName = dataView.resultstr + '(T+L)'; + let legendName = dataView.resultName + '(T+L)'; legendData.push(legendName); seriesData.push({ name: legendName, @@ -393,29 +413,29 @@ showSymbol: false, connectNulls: true, yAxisIndex: yAxisIndex, - smooth: true, + smooth: false, lineStyle: { width: 2 } }); } if (chartCheckArray.indexOf('当时') !== -1) { - let legendName = dataView.resultstr + '(当时)'; + let legendName = dataView.resultName + '(当时)'; legendData.push(legendName); seriesData.push({ name: legendName, data: dataView.curData || [], type: 'line', yAxisIndex: yAxisIndex, - showSymbol: false, - smooth: true, + showSymbol: true, + smooth: false, lineStyle: { - width: 2 + width: 3 } }); } if (chartCheckArray.indexOf('调整值') !== -1) { - let legendName = dataView.resultstr + '(调整值)'; + let legendName = dataView.resultName + '(调整值)'; legendData.push(legendName); seriesData.push({ name: legendName, @@ -424,7 +444,7 @@ yAxisIndex: yAxisIndex, showSymbol: false, connectNulls: true, - smooth: true, + smooth: false, lineStyle: { width: 2, type: 'dashed' @@ -485,7 +505,9 @@ ], series: seriesData } - myChart.clear() + if (isClear) { + myChart.clear() + } myChart.setOption(option) } finally { loading1.value = false @@ -493,12 +515,55 @@ } onMounted(() => { + resetForm() getPreItemTree() - getList() }) async function getPreItemTree() { treeData.value = await McsApi.getPredictItemTree() +} + +function changeChartCheck(value) { + getList(true) +} + +function onChangeMultipleY() { + getList(true) +} + +function playChart(isBack = false) { + let mins = isBack ? formData.value.predictFreq * -1 : formData.value.predictFreq + let startTime = formData.value.startTime; + let endTime = formData.value.endTime; + let predictTime = formData.value.predictTime; + if (predictTime) { + predictTime = getYMDHMS(new Date(predictTime).getTime() + 1000 * 60 * mins); + formData.value.predictTime = predictTime; + } + if (startTime) { + startTime = getYMDHMS(new Date(startTime).getTime() + 1000 * 60 * mins); + formData.value.startTime = startTime; + } + if (endTime) { + endTime = getYMDHMS(new Date(endTime).getTime() + 1000 * 60 * mins); + formData.value.endTime = endTime; + } + getList(false); +} + +function playHandle(type) { + isPlay.value = 'play' === type + let doPlay = setInterval(function () { + if (isPlay.value) { + playChart() + } else { + clearInterval(doPlay); + } + if (new Date().getTime() - new Date(formData.value.predictTime).getTime() < 1000 * 60 ) { + isPlay.value = false + clearInterval(doPlay); + } + }, 1000) } function leftSearchDataByRange() { @@ -507,18 +572,18 @@ let endTime = formData.value.endTime; let predictTime = formData.value.predictTime; if (predictTime) { - predictTime = getYMDHMS(new Date(predictTime) - 1000 * 60 * mins); + predictTime = getYMDHMS(new Date(predictTime).getTime() - 1000 * 60 * mins); formData.value.predictTime = predictTime; } if (startTime) { - startTime = getYMDHMS(new Date(startTime) - 1000 * 60 * mins); + startTime = getYMDHMS(new Date(startTime).getTime() - 1000 * 60 * mins); formData.value.startTime = startTime; } if (endTime) { - endTime = getYMDHMS(new Date(endTime) - 1000 * 60 * mins); + endTime = getYMDHMS(new Date(endTime).getTime() - 1000 * 60 * mins); formData.value.endTime = endTime; } - getList(); + getList(false); } function getRangeMins() { @@ -561,9 +626,8 @@ calRateForm.value.itemMin = 0; calRateForm.value.itemAvg = 0; calRateForm.value.realCumulant = 0; - return } else { - let dataView = itemDataObject[calRateForm.value.calItem] + let dataView = itemDataObject.value[calRateForm.value.calItem] calRateForm.value.itemPreMax = dataView.preMax; calRateForm.value.itemPreMin = dataView.preMin; calRateForm.value.itemPreAvg = dataView.preAvg; @@ -635,20 +699,66 @@ let endTime = formData.value.endTime; let predictTime = formData.value.predictTime; if (predictTime) { - predictTime = getYMDHMS(new Date(predictTime) - 0 + 1000 * 60 * mins); + predictTime = getYMDHMS(new Date(predictTime).getTime() + 1000 * 60 * mins); formData.value.predictTime = predictTime; } if (startTime) { - startTime = getYMDHMS(new Date(startTime) - 0 + 1000 * 60 * mins); + startTime = getYMDHMS(new Date(startTime).getTime() + 1000 * 60 * mins); formData.value.startTime = startTime; } if (endTime) { - endTime = getYMDHMS(new Date(endTime) - 0 + 1000 * 60 * mins); + endTime = getYMDHMS(new Date(endTime).getTime() + 1000 * 60 * mins); formData.value.endTime = endTime; } - getList(); + getList(false); } +/** 重置表单 */ +const resetForm = () => { + formData.value = { + rangeDate: '', + startTime: '', + endTime: '', + predictTime: '', + predictTimeStr: '', + startTimeStr: '', + endTimeStr: '', + predictTimeStamp: 0, + startTimeStamp: 0, + endTimeStamp: 0, + currentStamp: '', + currentStamp60: '', + predictStamp: '', + chartCheck: ['T+L', '真实值'], + chartOptions: ['T+N', 'T+L', '当时', '真实值', '调整值'], + checkedItemData: [], + backItem: '', + backValue: 0, + backCoe: 1, + preCumulant: 0, + realCumulant: 0, + queryStep: 2, + isMultipleYRadio: '单坐标轴', + isMultipleY: false, + predictFreq: 2, + } + calRateForm.value = { + calItem: undefined, + IN_DEVIATION: 0, + OUT_DEVIATION: 0, + IN_ACCURACY_RATE: 0, + OUT_ACCURACY_RATE: 0, + itemAvg: 0, + itemMax: 0, + itemMin: 0, + itemPreAvg: 0, + itemPreMax: 0, + itemPreMin: 0, + preCumulant: 0, + realCumulant: 0 + } + calRateFormRef.value?.resetFields() +} </script> <style scoped> .el-form-item { -- Gitblit v1.9.3