refactor:【antd】【iot】重构首页统计组件,优化图表配置和数据加载逻辑,移除未使用的比较卡片组件

This commit is contained in:
haohao
2025-11-23 15:07:21 +08:00
parent b06278b3fd
commit a1e6982a28
11 changed files with 429 additions and 537 deletions

View File

@@ -1,18 +1,78 @@
<script setup lang="ts">
import { Page } from '@vben/common-ui';
import { ComparisonCard, Page } from '@vben/common-ui';
import { Col, Row } from 'ant-design-vue';
import { onMounted, ref } from 'vue';
import { useIotHome } from './data';
import ComparisonCard from './modules/comparison-card.vue';
import { getStatisticsSummary } from '#/api/iot/statistics';
import { defaultStatsData, type StatsData } from './data';
import DeviceCountCard from './modules/device-count-card.vue';
import DeviceStateCountCard from './modules/device-state-count-card.vue';
import MessageTrendCard from './modules/message-trend-card.vue';
defineOptions({ name: 'IoTHome' });
// TODO @haohao相关的方法拿到 index.vue 里data.ts 只放 schema
const { loading, statsData } = useIotHome();
const loading = ref(true);
const statsData = ref<StatsData>(defaultStatsData);
/**
* 加载统计数据
* @returns Promise<StatsData>
*/
async function loadStatisticsData(): Promise<StatsData> {
try {
const data = await getStatisticsSummary();
return data;
} catch (error) {
// 开发环境:记录错误信息,便于调试
console.error('获取统计数据出错:', error);
// 开发环境:提示使用 Mock 数据,提醒检查后端接口
console.warn('使用 Mock 数据,请检查后端接口是否已实现');
// 开发调试:返回 Mock 数据,确保前端功能正常开发
// 生产环境:建议移除 Mock 数据,直接抛出错误或返回空数据
return {
productCategoryCount: 12,
productCount: 45,
deviceCount: 328,
deviceMessageCount: 15_678,
productCategoryTodayCount: 2,
productTodayCount: 5,
deviceTodayCount: 23,
deviceMessageTodayCount: 1234,
deviceOnlineCount: 256,
deviceOfflineCount: 48,
deviceInactiveCount: 24,
productCategoryDeviceCounts: {
智能家居: 120,
工业设备: 98,
环境监测: 65,
智能穿戴: 45,
},
};
}
}
/**
* 加载数据
*/
async function loadData() {
loading.value = true;
try {
statsData.value = await loadStatisticsData();
} catch (error) {
// 开发环境:记录错误信息,便于调试
console.error('获取统计数据出错:', error);
} finally {
loading.value = false;
}
}
/** 组件挂载时加载数据 */
onMounted(() => {
loadData();
});
</script>
<template>