2025-10-07 19:58:59 +08:00
|
|
|
|
<script setup lang="ts">
|
2025-04-21 19:05:00 +08:00
|
|
|
|
import { Page } from '@vben/common-ui';
|
2025-04-22 22:10:33 +08:00
|
|
|
|
|
2025-10-10 20:26:17 +08:00
|
|
|
|
import { Col, Row } from 'ant-design-vue';
|
|
|
|
|
|
|
|
|
|
|
|
// 导入业务逻辑
|
|
|
|
|
|
import { useIotHome } from './data';
|
2025-10-07 19:58:59 +08:00
|
|
|
|
// 导入组件
|
|
|
|
|
|
import ComparisonCard from './modules/ComparisonCard.vue';
|
|
|
|
|
|
import DeviceCountCard from './modules/DeviceCountCard.vue';
|
|
|
|
|
|
import DeviceStateCountCard from './modules/DeviceStateCountCard.vue';
|
|
|
|
|
|
import MessageTrendCard from './modules/MessageTrendCard.vue';
|
|
|
|
|
|
|
|
|
|
|
|
defineOptions({ name: 'IoTHome' });
|
|
|
|
|
|
|
|
|
|
|
|
// 使用业务逻辑 Hook
|
|
|
|
|
|
const { loading, statsData } = useIotHome();
|
2025-04-21 19:05:00 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<Page>
|
2025-10-07 19:58:59 +08:00
|
|
|
|
<!-- 第一行:统计卡片 -->
|
|
|
|
|
|
<Row :gutter="16" class="mb-4">
|
|
|
|
|
|
<Col :span="6">
|
|
|
|
|
|
<ComparisonCard
|
|
|
|
|
|
title="分类数量"
|
|
|
|
|
|
:value="statsData.productCategoryCount"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
:today-count="statsData.productCategoryTodayCount"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
icon="menu"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
icon-color="text-blue-500"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
:loading="loading"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col :span="6">
|
|
|
|
|
|
<ComparisonCard
|
|
|
|
|
|
title="产品数量"
|
|
|
|
|
|
:value="statsData.productCount"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
:today-count="statsData.productTodayCount"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
icon="box"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
icon-color="text-orange-500"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
:loading="loading"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col :span="6">
|
|
|
|
|
|
<ComparisonCard
|
|
|
|
|
|
title="设备数量"
|
|
|
|
|
|
:value="statsData.deviceCount"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
:today-count="statsData.deviceTodayCount"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
icon="cpu"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
icon-color="text-purple-500"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
:loading="loading"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
<Col :span="6">
|
|
|
|
|
|
<ComparisonCard
|
|
|
|
|
|
title="设备消息数"
|
|
|
|
|
|
:value="statsData.deviceMessageCount"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
:today-count="statsData.deviceMessageTodayCount"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
icon="message"
|
2025-10-10 20:26:17 +08:00
|
|
|
|
icon-color="text-teal-500"
|
2025-10-07 19:58:59 +08:00
|
|
|
|
:loading="loading"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 第二行:图表 -->
|
|
|
|
|
|
<Row :gutter="16" class="mb-4">
|
|
|
|
|
|
<Col :span="12">
|
2025-10-10 20:26:17 +08:00
|
|
|
|
<DeviceCountCard :stats-data="statsData" :loading="loading" />
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
<Col :span="12">
|
2025-10-10 20:26:17 +08:00
|
|
|
|
<DeviceStateCountCard :stats-data="statsData" :loading="loading" />
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 第三行:消息统计 -->
|
|
|
|
|
|
<Row :gutter="16">
|
|
|
|
|
|
<Col :span="24">
|
|
|
|
|
|
<MessageTrendCard />
|
|
|
|
|
|
</Col>
|
|
|
|
|
|
</Row>
|
2025-04-21 19:05:00 +08:00
|
|
|
|
</Page>
|
2025-04-22 22:10:33 +08:00
|
|
|
|
</template>
|
2025-10-07 19:58:59 +08:00
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
:deep(.vben-page-content) {
|
|
|
|
|
|
padding: 16px;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|