diff --git a/apps/web-antd/src/views/iot/home/modules/message-trend-card.vue b/apps/web-antd/src/views/iot/home/modules/message-trend-card.vue index 8afdd03e7..28ea84a4a 100644 --- a/apps/web-antd/src/views/iot/home/modules/message-trend-card.vue +++ b/apps/web-antd/src/views/iot/home/modules/message-trend-card.vue @@ -6,7 +6,6 @@ import { computed, nextTick, onMounted, reactive, ref } from 'vue'; import { DICT_TYPE } from '@vben/constants'; import { getDictOptions } from '@vben/hooks'; import { EchartsUI, useEcharts } from '@vben/plugins/echarts'; -import { beginOfDay, endOfDay, formatDateTime } from '@vben/utils'; import { Card, DatePicker, Empty, Select } from 'ant-design-vue'; import dayjs from 'dayjs'; @@ -89,8 +88,6 @@ async function fetchMessageData() { loading.value = true; try { messageData.value = await getDeviceMessageSummaryByDate(queryParams); - await nextTick(); - initChart(); } catch (error) { // 开发环境:记录错误信息,便于调试 console.error('获取消息统计数据失败:', error); @@ -98,11 +95,13 @@ async function fetchMessageData() { messageData.value = []; } finally { loading.value = false; + await renderChartWhenReady(); } } /** 初始化图表 */ function initChart() { + // 检查数据是否存在 if (!hasData.value) return; const times = messageData.value.map((item) => item.time); @@ -114,6 +113,15 @@ function initChart() { ); } +/** 确保图表容器已经可见后再渲染 */ +async function renderChartWhenReady() { + if (!hasData.value) return; + // 等待 Card loading 状态、v-show 等 DOM 更新完成 + await nextTick(); + await nextTick(); + initChart(); +} + /** 组件挂载时查询数据 */ onMounted(() => { fetchMessageData(); @@ -121,7 +129,7 @@ onMounted(() => {