| | |
| | | <template> |
| | | <el-dialog :destroy-on-close="true" v-model="isShow" draggable :close-on-click-modal="false" :title="chartValues?.title"> |
| | | <RecordSet chartHeight="30rem" ref="recordSetRef" :data="chartValues"> |
| | | <TimeRange class="flex-0 m-1" @change="timeRangeChange" /> |
| | | <List class="flex-0 m-1" v-model="stepTime" :data="listData" @change="selectStepChange" /> |
| | | <el-dialog |
| | | :destroy-on-close="true" |
| | | v-model="isShow" |
| | | draggable |
| | | :close-on-click-modal="false" |
| | | :title="chartValues?.title" |
| | | v-if="computedIsDialog" |
| | | > |
| | | <RecordSet :chartHeight="computedHeight" :tableHeight="tableHeight" ref="recordSetRef" :data="chartValues"> |
| | | <TimeRange ref="timeRangeRef" v-model="queryRange" class="flex-0 m-1" @change="timeRangeChange" /> |
| | | <!-- <List class="flex-0 m-1" v-model="stepTime" :data="listData" @change="selectStepChange" /> --> |
| | | </RecordSet> |
| | | </el-dialog> |
| | | <div v-else v-show="isShow"> |
| | | <RecordSet :chartHeight="computedHeight" :tableHeight="tableHeight" ref="recordSetRef" :data="chartValues"> |
| | | <TimeRange ref="timeRangeRef" v-model="queryRange" class="flex-0 m-1" @change="timeRangeChange" /> |
| | | </RecordSet> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { nextTick, ref, watch } from 'vue'; |
| | | import { computed, nextTick, ref, watch } from 'vue'; |
| | | import RecordSet from './RecordSet.vue'; |
| | | import List from './components/List.vue'; |
| | | import TimeRange from './components/TimeRange.vue'; |
| | | import { queryScadaTimeValues } from '/@/api/ai/chat'; |
| | | import { formatDate } from '/@/utils/formatTime'; |
| | | import { useCompRef } from '/@/utils/types'; |
| | | import { getRecentDateRange } from '/@/utils/util'; |
| | | import { formatDate } from '/@/utils/formatTime'; |
| | | import TimeRange from './components/TimeRange.vue'; |
| | | import List from './components/List.vue'; |
| | | import service from '/@/utils/request'; |
| | | |
| | | const props = defineProps(['otype', 'oname']); |
| | | const props = defineProps(['isDialog', 'height', 'metrics', 'tableHeight', 'metricsInfo', 'lastValueItem']); |
| | | // SDVAL_FULL_FLOW true 25 DEV_FLOW_W |
| | | |
| | | const computedIsDialog = computed(() => props.isDialog ?? true); |
| | | const computedHeight = computed(() => props.height ?? '30rem'); |
| | | |
| | | const isShow = defineModel({ |
| | | type: Boolean, |
| | | }); |
| | | |
| | | const recordSetRef = useCompRef(RecordSet); |
| | | const timeRangeRef = useCompRef(TimeRange); |
| | | |
| | | const listData = { |
| | | list: [ |
| | |
| | | |
| | | const queryRange = ref<string[]>(null); |
| | | const timeRangeChange = (val) => { |
| | | queryRange.value = val; |
| | | setChartData(queryRange.value); |
| | | setChartData(); |
| | | }; |
| | | |
| | | const selectStepChange = (val) => { |
| | | setChartData(queryRange.value); |
| | | setChartData(); |
| | | }; |
| | | const stepTime = ref('5 minutes'); |
| | | const chartValues = ref(null); |
| | | const setChartData = async (timeRange: string[]) => { |
| | | const res = await queryScadaTimeValues({ |
| | | otype: props.otype, |
| | | oname: props.oname, |
| | | start_time: timeRange[0], |
| | | end_time: timeRange[1], |
| | | step_time: stepTime.value, |
| | | const setChartData = async () => { |
| | | let url = ''; |
| | | if (computedIsDialog.value) { |
| | | const otype = props.metricsInfo.id; |
| | | const oname = props.lastValueItem[otype]?.ONAME; |
| | | const queryId = props.metricsInfo.query_detail_id; |
| | | url = `chat/query_detail_values?query_id=${queryId}&otype=${otype}&oname=${oname}`; |
| | | } else { |
| | | url = props.metrics.url; |
| | | } |
| | | let res = await service({ |
| | | url: url, |
| | | method: 'post', |
| | | data: { |
| | | start_time: timeRangeRef.value.formatDateValue[0], |
| | | end_time: timeRangeRef.value.formatDateValue[1], |
| | | step_time: stepTime.value, |
| | | }, |
| | | }); |
| | | if (!computedIsDialog.value) { |
| | | res = { |
| | | json_ok: res.json_ok, |
| | | values: { |
| | | title: props.metrics.title, |
| | | values: res.values, |
| | | cols: [ |
| | | { |
| | | title: '时间', |
| | | type: 'time', |
| | | }, |
| | | { |
| | | title: '值', |
| | | type: 'value', |
| | | }, |
| | | ], |
| | | }, |
| | | }; |
| | | } else { |
| | | res = { |
| | | json_ok: res.json_ok, |
| | | values: { |
| | | title: props.lastValueItem.OTITLE, |
| | | values: res.values, |
| | | cols: [ |
| | | { |
| | | title: '时间', |
| | | type: 'time', |
| | | }, |
| | | { |
| | | title: '值', |
| | | type: 'value', |
| | | }, |
| | | ], |
| | | }, |
| | | }; |
| | | if (props.metricsInfo.unit) { |
| | | res.values.unit = props.metricsInfo.unit; |
| | | } |
| | | } |
| | | chartValues.value = res.values; |
| | | nextTick(()=>{ |
| | | recordSetRef.value.drawChart(); |
| | | }) |
| | | chartValues.value.chart = 'single_line'; |
| | | |
| | | nextTick(() => { |
| | | setTimeout(() => { |
| | | if (recordSetRef.value.isMultiCompare) { |
| | | recordSetRef.value.handleData(); |
| | | recordSetRef.value.handleMultiCompare(); |
| | | } else { |
| | | recordSetRef.value.drawChart(); |
| | | } |
| | | }, 0); |
| | | }); |
| | | }; |
| | | |
| | | watch( |
| | | () => isShow.value, |
| | | (val) => { |
| | | if (!val) { |
| | | recordSetRef.value?.clearChart(); |
| | | return; |
| | | } |
| | | queryRange.value = getRecentDateRange(1).map((item) => formatDate(item)); |
| | | setChartData(queryRange.value); |
| | | nextTick(() => { |
| | | setChartData(); |
| | | }); |
| | | }, |
| | | { |
| | | immediate: true, |
| | | } |
| | | ); |
| | | </script> |