feat(图表组件): 替换mock数据为真实API请求
添加axios依赖并实现API数据获取逻辑 移除mock数据文件和相关转换函数 添加onMounted钩子初始化图表数据
This commit is contained in:
parent
fc2230a992
commit
ad978983e8
@ -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.json格式转换为mock.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
|
||||
}
|
||||
|
||||
// 转换mock1数据为mock格式
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user