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> </div>
</template> </template>
<script setup lang="ts"> <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 VChart from 'vue-echarts'
import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook' import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
import { use } from 'echarts/core' import { use } from 'echarts/core'
@ -52,7 +52,7 @@ import { useChartDataFetch } from '@/hooks'
import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components' import { DatasetComponent, GridComponent, TooltipComponent, LegendComponent } from 'echarts/components'
import isObject from 'lodash/isObject' import isObject from 'lodash/isObject'
import CustomSelect from './select.vue' import CustomSelect from './select.vue'
import mockData1 from './mock1.json' import axios from 'axios'
const props = defineProps({ const props = defineProps({
themeSetting: { themeSetting: {
@ -82,102 +82,101 @@ const replaceMergeArr = ref<string[]>()
// //
const selectedTimeRange = ref('day') const selectedTimeRange = ref('day')
// mock1.jsonmock.json // API
const convertMock1ToMockFormat = (mock1Data: any) => { const fetchChartData = async (option: string) => {
const convertedData: any = {} try {
const response = await axios.get(`/screen/handleByOption/${option}`)
Object.keys(mock1Data).forEach(timeRange => { if (response.data.state === true) {
const dataArray = mock1Data[timeRange] return response.data.value || []
} else {
if (!Array.isArray(dataArray) || dataArray.length === 0) { console.error('API调用失败:', response.data)
convertedData[timeRange] = { return []
alertTotal: 0,
unprocessedAlert: 0,
averageResolutionTime: 0,
datavalues: [['时间', '数值']]
}
return
} }
} catch (error) {
// console.error('获取图表数据失败:', error)
const alertTotal = dataArray.reduce((sum, item) => sum + (item.alarm_count || 0), 0) return []
const unprocessedAlert = dataArray.reduce((sum, item) => sum + (item.un_alarm_count || 0), 0) }
const avgHandleTimeSum = dataArray.reduce((sum, item) => sum + (item.avg_handle_time_seconds || 0), 0)
const averageResolutionTime = Math.round(avgHandleTimeSum / dataArray.length)
// datavalues
let datavalues: (string | number)[][] = [['时间', '数值']]
switch (timeRange) {
case 'day':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
`${item.alarm_hour}:00`,
item.avg_handle_time_seconds || 0
])]
break
case 'week':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
item.week_day_name || '',
item.avg_handle_time_seconds || 0
])]
break
case 'month':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
item.alarm_date || '',
item.avg_handle_time_seconds || 0
])]
break
case 'quarter':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
`${item.month}`,
item.avg_handle_time_seconds || 0
])]
break
case 'year':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
`${item.month}`,
item.avg_handle_time_seconds || 0
])]
break
default:
datavalues = [['时间', '数值']]
}
convertedData[timeRange] = {
alertTotal,
unprocessedAlert,
averageResolutionTime,
datavalues
}
})
return convertedData
} }
// mock1mock // API
const convertedMockData = convertMock1ToMockFormat(mockData1) const convertApiDataToMockFormat = async (timeRange: string) => {
const dataArray = await fetchChartData(timeRange)
if (!Array.isArray(dataArray) || dataArray.length === 0) {
return {
alertTotal: 0,
unprocessedAlert: 0,
averageResolutionTime: 0,
datavalues: [['时间', '数值']]
}
}
//
const alertTotal = dataArray.reduce((sum, item) => sum + (item.alarm_count || 0), 0)
const unprocessedAlert = dataArray.reduce((sum, item) => sum + (item.un_alarm_count || 0), 0)
const avgHandleTimeSum = dataArray.reduce((sum, item) => sum + (item.avg_handle_time_seconds || 0), 0)
const averageResolutionTime = Math.round(avgHandleTimeSum / dataArray.length)
// datavalues
let datavalues: (string | number)[][] = [['时间', '数值']]
switch (timeRange) {
case 'day':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
`${item.alarm_hour}:00`,
item.avg_handle_time_seconds || 0
])]
break
case 'week':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
item.week_day_name || '',
item.avg_handle_time_seconds || 0
])]
break
case 'month':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
item.alarm_date || '',
item.avg_handle_time_seconds || 0
])]
break
case 'quarter':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
`${item.month}`,
item.avg_handle_time_seconds || 0
])]
break
case 'year':
datavalues = [['时间', '数值'], ...dataArray.map(item => [
`${item.month}`,
item.avg_handle_time_seconds || 0
])]
break
default:
datavalues = [['时间', '数值']]
}
return {
alertTotal,
unprocessedAlert,
averageResolutionTime,
datavalues
}
}
// //
const getMockDataByTimeRange = (timeRange: string) => { const currentData = ref({
const defaultData = { alertTotal: 0,
alertTotal: 0, unprocessedAlert: 0,
unprocessedAlert: 0, averageResolutionTime: 0,
averageResolutionTime: 0, datavalues: [['时间', '数值']]
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 chartOption = computed(() => {
const mergedOption = mergeTheme(props.chartConfig.option, props.themeSetting, includes) const mergedOption = mergeTheme(props.chartConfig.option, props.themeSetting, includes)
@ -224,10 +223,16 @@ const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore, (n
const handleSelectChange = (value: any) => { const handleSelectChange = (value: any) => {
props.chartConfig.option.dateTime.selectValue = value props.chartConfig.option.dateTime.selectValue = value
selectedTimeRange.value = value selectedTimeRange.value = value
updateChartData()
} }
// //
selectedTimeRange.value = props.chartConfig.option.dateTime.selectValue || 'day' selectedTimeRange.value = props.chartConfig.option.dateTime.selectValue || 'day'
//
onMounted(() => {
updateChartData()
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@include go(border-box) { @include go(border-box) {