| | |
| | | <el-form :inline="true" :model="formData" label-width="80px"> |
| | | <el-form-item label="开始时间"> |
| | | <el-date-picker |
| | | size="mini" |
| | | v-model="formData.startTime" |
| | | type="datetime" |
| | | placeholder="选择日期时间"/> |
| | | </el-form-item> |
| | | <el-form-item label="结束时间"> |
| | | <el-date-picker |
| | | size="mini" |
| | | v-model="formData.endTime" |
| | | type="datetime" |
| | | placeholder="选择日期时间"/> |
| | | </el-form-item> |
| | | <el-form-item label="预测时间"> |
| | | <el-date-picker |
| | | size="mini" |
| | | v-model="formData.predictTime" |
| | | type="datetime" |
| | | placeholder="选择日期时间"/> |
| | | </el-form-item> |
| | | <el-form-item label="预测频率"> |
| | | <el-input-number size="mini" v-model="formData.predictFreq" controls-position="right" :min="1" |
| | | <el-input-number v-model="formData.predictFreq" controls-position="right" |
| | | :min="1" |
| | | :max="10"/> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button-group> |
| | | <el-button size="mini" type="primary" plain :icon="ArrowLeft" |
| | | <el-button type="primary" plain :icon="ArrowLeft" |
| | | v-loading="loading1" @click="leftSearchDataByRange()"/> |
| | | <el-button size="mini" type="primary" plain :icon="Search" |
| | | v-loading="loading1" @click="getList()">查询</el-button> |
| | | <el-button size="mini" type="primary" plain :icon="ArrowRight" |
| | | <el-button type="primary" plain :icon="Search" |
| | | v-loading="loading1" @click="getList()">查询 |
| | | </el-button> |
| | | <el-button type="primary" plain :icon="ArrowRight" |
| | | v-loading="loading1" @click="rightSearchDataByRange()"/> |
| | | </el-button-group> |
| | | </el-form-item> |
| | |
| | | </div> |
| | | <div class="his-body-right"> |
| | | <div class="his-body-chart"> |
| | | <el-form :inline="true" :model="calRateForm" :rules="formRules" ref="calRateForm" label-width="108px"> |
| | | <el-form :inline="true" :model="calRateForm" :rules="formRules" ref="calRateForm" |
| | | label-width="108px"> |
| | | <el-row> |
| | | <el-col :span="6" > |
| | | <el-form-item label="预测项" prop="calItem" style="width: 90%"> |
| | | <el-select v-model="calRateForm.calItem" @change="calItemBaseVale" placeholder="请选择"> |
| | | <el-select size="small" v-model="calRateForm.calItem" @change="calItemBaseVale" |
| | | placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in formData.checkedItemData" |
| | | :key="item.id" |
| | |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="精准度偏差" prop="IN_DEVIATION"> |
| | | <el-input-number size="mini" v-model="calRateForm.IN_DEVIATION" controls-position="right" :min="1" |
| | | <el-input-number size="small" v-model="calRateForm.IN_DEVIATION" |
| | | controls-position="right" :min="1" |
| | | :max="10"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="不可信率偏差" prop="OUT_DEVIATION"> |
| | | <el-input-number size="mini" v-model="calRateForm.OUT_DEVIATION" controls-position="right" |
| | | <el-input-number size="small" v-model="calRateForm.OUT_DEVIATION" |
| | | controls-position="right" |
| | | :min="1" |
| | | :max="20"/> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item> |
| | | <el-button size="mini" type="primary" plain :loading="loading2" @click="calAccuracyRate">计算精准度 |
| | | <el-button size="small" type="primary" plain :loading="loading2" |
| | | @click="calAccuracyRate">计算精准度 |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="数据类型"> |
| | | <el-checkbox-group v-model="formData.chartCheck" @change="changeChartCheck"> |
| | | <el-checkbox v-for="item in formData.chartOptions" :label="item" :key="item">{{item}} |
| | | <el-checkbox v-for="item in formData.chartOptions" :label="item" |
| | | :key="item">{{ item }} |
| | | </el-checkbox> |
| | | </el-checkbox-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item> |
| | | <el-radio v-model="formData.isMultipleY" :label="false" @input="onChangeMultipleY">单坐标轴</el-radio> |
| | | <el-radio v-model="formData.isMultipleY" :label="true" @input="onChangeMultipleY">多坐标轴</el-radio> |
| | | <el-radio v-model="formData.isMultipleY" :label="false" |
| | | @input="onChangeMultipleY">单坐标轴 |
| | | </el-radio> |
| | | <el-radio v-model="formData.isMultipleY" :label="true" |
| | | @input="onChangeMultipleY">多坐标轴 |
| | | </el-radio> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div id="data-analysis" style="height: 500px;"></div> |
| | | <div ref="dataAnalysisChart" style="height: 500px;"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import {getYMDHMS} from "@/utils/dateUtil" |
| | | import * as CategoryApi from "@/api/data/ind/category"; |
| | | import * as DmModule from '@/api/model/pre/dm' |
| | | import * as ItemApi from "@/api/data/ind/item/item"; |
| | | import * as MmPredictItem from '@/api/model/pre/item' |
| | | 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"; |
| | | |
| | | defineOptions({name: 'AnalysisformData'}) |
| | | |
| | | const message = useMessage() // 消息弹窗 |
| | | const { t } = useI18n() // 国际化 |
| | | const dataCategoryList = ref([] as CategoryApi.IndItemCategoryVO[]) |
| | | const dataAnalysisChart = ref(null); |
| | | const loading1 = ref(false) // 列表的加载中 |
| | | const loading2 = ref(false) // 列表的加载中 |
| | | const total = ref(0) // 列表的总页数 |
| | | const list = ref([]) // 字典表格数据 |
| | | const queryParams = reactive({ |
| | | pageNo: 1, |
| | | pageSize: 10, |
| | | itemno: '', |
| | | itemname: '', |
| | | }) |
| | | let formData = ref({ |
| | | rangeDate: '', |
| | | startTime: '', |
| | |
| | | chart: {}, |
| | | option: {} |
| | | }) |
| | | const chartContainer = ref(null); |
| | | const treeData = ref([]) |
| | | const itemDataObject = ref() |
| | | const timer = ref() |
| | | let myChart = null; |
| | | |
| | | const formRules = reactive({ |
| | | calItem: [{required: true, message: '预测项不能为空', trigger: 'blur'}], |
| | | IN_DEVIATION: [{required: true, message: '精准度偏差不能为空', trigger: 'blur'}], |
| | | OUT_DEVIATION: [{required: true, message: '不可信率偏差不能为空', trigger: 'blur'}], |
| | | }) |
| | | //const myChart = echarts.init(document.getElementById("data-analysis")); |
| | | |
| | | /** 查询列表 */ |
| | | const getList = async () => { |
| | | loading1.value = true |
| | | try { |
| | | const data = formData.value |
| | | if (!formData.value.chartCheck) { |
| | | formData.value.chartCheck = ['真实值'] |
| | | } |
| | |
| | | itemData.value.option = {}; |
| | | return; |
| | | } |
| | | let itemIdList = formData.value.checkedItemData.map(item => { |
| | | let outIds = formData.value.checkedItemData.map(item => { |
| | | return item.id |
| | | }) |
| | | const params = ref({ |
| | | itemIds: itemIdList.join(','), |
| | | const params = reactive({ |
| | | outIds: outIds, |
| | | predictTime: formData.value.predictTime, |
| | | startTime: formData.value.startTime, |
| | | endTime: formData.value.endTime |
| | | }) |
| | | const res = await MmPredictItem.getViewCharts(params) |
| | | if (res.code !== 0) { |
| | | return message.error(res.msg) |
| | | } |
| | | formData.value.predictTime = res.data.predictTime; |
| | | formData.value.startTime = res.data.startTime |
| | | formData.value.endTime = res.data.endTime |
| | | const data = await McsApi.getPreDataCharts(params) |
| | | formData.value.predictTime = data.predictTime; |
| | | formData.value.startTime = data.startTime |
| | | formData.value.endTime = data.endTime |
| | | |
| | | let xAxisData = res.data.categories; |
| | | let xAxisData = data.categories; |
| | | let yAxisData = []; |
| | | let offset = 0; |
| | | let yAxisIndex = 0; |
| | |
| | | }, |
| | | }); |
| | | itemDataObject.value = {} |
| | | for (let i = 0; i < res.data.dataViewList.length; i++) { |
| | | let dataView = res.data.dataViewList[i] |
| | | itemDataObject.value.dataView.itemId = dataView; |
| | | for (let i = 0; i < data.dataViewList.length; i++) { |
| | | let dataView = data.dataViewList[i] |
| | | itemDataObject.value[dataView.outId] = dataView; |
| | | let maxValue = dataView.maxValue; |
| | | let minValue = dataView.minValue; |
| | | yAxisIndex = formData.value.isMultipleY ? i : 0; |
| | |
| | | }) |
| | | offset = offset + 40 |
| | | if (chartCheckArray.indexOf('真实值') !== -1) { |
| | | let legendName = dataView.itemName + '(真实)'; |
| | | let legendName = dataView.resultstr + '(真实)'; |
| | | legendData.push(legendName); |
| | | seriesData.push({ |
| | | name: legendName, |
| | |
| | | showSymbol: false, |
| | | smooth: true, |
| | | lineStyle: { |
| | | width: 3 |
| | | width: 2 |
| | | } |
| | | }); |
| | | } |
| | | if (chartCheckArray.indexOf('T+N') !== -1) { |
| | | let legendName = dataView.itemName + '(T+N)'; |
| | | let legendName = dataView.resultstr + '(T+N)'; |
| | | seriesData.push({ |
| | | name: legendName, |
| | | data: dataView.preDataN || [], |
| | |
| | | showSymbol: false, |
| | | smooth: true, |
| | | lineStyle: { |
| | | width: 3 |
| | | width: 2 |
| | | } |
| | | }); |
| | | } |
| | | if (chartCheckArray.indexOf('T+L') !== -1) { |
| | | let legendName = dataView.itemName + '(T+L)'; |
| | | let legendName = dataView.resultstr + '(T+L)'; |
| | | legendData.push(legendName); |
| | | seriesData.push({ |
| | | name: legendName, |
| | |
| | | yAxisIndex: yAxisIndex, |
| | | smooth: true, |
| | | lineStyle: { |
| | | width: 3 |
| | | width: 2 |
| | | } |
| | | }); |
| | | } |
| | | if (chartCheckArray.indexOf('当时') !== -1) { |
| | | let legendName = dataView.itemName + '(当时)'; |
| | | let legendName = dataView.resultstr + '(当时)'; |
| | | legendData.push(legendName); |
| | | seriesData.push({ |
| | | name: legendName, |
| | |
| | | showSymbol: false, |
| | | smooth: true, |
| | | lineStyle: { |
| | | width: 3 |
| | | width: 2 |
| | | } |
| | | }); |
| | | } |
| | | if (chartCheckArray.indexOf('调整值') !== -1) { |
| | | let legendName = dataView.itemName + '(调整值)'; |
| | | let legendName = dataView.resultstr + '(调整值)'; |
| | | legendData.push(legendName); |
| | | seriesData.push({ |
| | | name: legendName, |
| | |
| | | connectNulls: true, |
| | | smooth: true, |
| | | lineStyle: { |
| | | width: 3, |
| | | width: 2, |
| | | type: 'dashed' |
| | | } |
| | | }); |
| | |
| | | } |
| | | } |
| | | } |
| | | myChart = echarts.init(dataAnalysisChart.value); |
| | | let option = { |
| | | title: { |
| | | text: '' |
| | |
| | | top: 10 |
| | | }, |
| | | grid: { |
| | | top: 50, |
| | | top: '20%', |
| | | left: '3%', |
| | | right: '6%', |
| | | bottom: '3%', |
| | |
| | | ], |
| | | series: seriesData |
| | | } |
| | | //chart.setOption(option) |
| | | myChart.clear() |
| | | myChart.setOption(option) |
| | | } finally { |
| | | loading1.value = false |
| | | } |
| | |
| | | }) |
| | | |
| | | async function getPreItemTree() { |
| | | treeData.value = await MmPredictItem.getMmPredictItemTree() |
| | | treeData.value = await McsApi.getPredictItemTree() |
| | | } |
| | | |
| | | function leftSearchDataByRange() { |
| | |
| | | if (checked.checkedNodes) { |
| | | formData.value.checkedItemData = [...checked.checkedNodes] |
| | | } |
| | | //myChart.clear() |
| | | debounce(getList(), 1000); |
| | | debounce(getList, 1000); |
| | | } |
| | | |
| | | function debounce(func, wait) { |