feat(图表组件): 替换mock数据为真实API请求

添加axios依赖并实现API数据获取逻辑
移除mock数据文件和相关转换函数
添加onMounted钩子初始化图表数据
This commit is contained in:
gaohaifeng 2025-08-27 21:08:48 +08:00
parent fc2230a992
commit ad978983e8

View File

@ -39,7 +39,7 @@
</div>
</template>
<script setup lang="ts">
import { PropType, computed, watch, ref, nextTick } from 'vue'
import { PropType, computed, watch, ref, nextTick,onMounted } from 'vue'
import VChart from 'vue-echarts'
import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
import { use } from 'echarts/core'
@ -52,7 +52,7 @@ import { useChartDataFetch } from '@/hooks'
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import isObject from 'lodash/isObject'
import CustomSelect from './select.vue'
import mockData1 from './mock1.json'
import axios from 'axios'
const props = defineProps({
themeSetting: {
@ -82,21 +82,33 @@ const replaceMergeArr = ref<string[]>()
//
const selectedTimeRange = ref('day')
// mock1.jsonmock.json
const convertMock1ToMockFormat = (mock1Data: any) => {
const convertedData: any = {}
// API
const fetchChartData = async (option: string) => {
try {
const response = await axios.get(`/screen/handleByOption/${option}`)
if (response.data.state === true) {
return response.data.value || []
} else {
console.error('API调用失败:', response.data)
return []
}
} catch (error) {
console.error('获取图表数据失败:', error)
return []
}
}
Object.keys(mock1Data).forEach(timeRange => {
const dataArray = mock1Data[timeRange]
// API
const convertApiDataToMockFormat = async (timeRange: string) => {
const dataArray = await fetchChartData(timeRange)
if (!Array.isArray(dataArray) || dataArray.length === 0) {
convertedData[timeRange] = {
return {
alertTotal: 0,
unprocessedAlert: 0,
averageResolutionTime: 0,
datavalues: [['时间', '数值']]
}
return
}
//
@ -143,41 +155,28 @@ const convertMock1ToMockFormat = (mock1Data: any) => {
datavalues = [['时间', '数值']]
}
convertedData[timeRange] = {
return {
alertTotal,
unprocessedAlert,
averageResolutionTime,
datavalues
}
})
return convertedData
}
// mock1mock
const convertedMockData = convertMock1ToMockFormat(mockData1)
//
const getMockDataByTimeRange = (timeRange: string) => {
const defaultData = {
const currentData = ref({
alertTotal: 0,
unprocessedAlert: 0,
averageResolutionTime: 0,
datavalues: [['时间', '数值']]
}
if (convertedMockData && convertedMockData[timeRange]) {
return convertedMockData[timeRange]
}
return defaultData
}
//
const currentData = computed(() => {
return getMockDataByTimeRange(selectedTimeRange.value)
})
//
const updateChartData = async () => {
const newData = await convertApiDataToMockFormat(selectedTimeRange.value)
currentData.value = newData
}
//
const chartOption = computed(() => {
const mergedOption = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
@ -224,10 +223,16 @@ const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore, (n
const handleSelectChange = (value: any) => {
props.chartConfig.option.dateTime.selectValue = value
selectedTimeRange.value = value
updateChartData()
}
//
//
selectedTimeRange.value = props.chartConfig.option.dateTime.selectValue || 'day'
//
onMounted(() => {
updateChartData()
})
</script>
<style lang="scss" scoped>
@include go(border-box) {