Files
ai-dimension/admin/src/views/Dashboard.vue
T
txai-dev 8c33617073 chore: 整合部署文件与管理端源码入仓
- deploy/server.Dockerfile、deploy/client-h5.Dockerfile(自 ai-art 仓库迁出,去重)
- docker-compose.yml 迁入并修正路径(admin 上下文 ./admin),新增可选 h5 服务(profile 隔离)
- admin/:管理前端完整源码(Vite+Vue3,自 workspace/dimension-admin 合并)
2026-09-12 22:34:52 +08:00

41 lines
1.6 KiB
Vue

<template>
<div>
<h2>数据看板</h2>
<div class="cards">
<el-card><div class="num">{{ s.newUsers ?? '-' }}</div><div class="lbl">今日新增</div></el-card>
<el-card><div class="num">{{ s.activeUsers ?? '-' }}</div><div class="lbl">今日活跃</div></el-card>
<el-card><div class="num">{{ s.newOrders ?? '-' }}</div><div class="lbl">今日订单</div></el-card>
<el-card><div class="num ok">{{ s.aiChatToday ?? '-' }}</div><div class="lbl">问答总数</div></el-card>
<el-card><div class="num">{{ s.aiChatUsers ?? '-' }}</div><div class="lbl">问答用户</div></el-card>
<el-card><div class="num">{{ s.aiChatShares ?? '-' }}</div><div class="lbl">分享次数</div></el-card>
</div>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import { apiGet } from '../api'
const s = ref({})
onMounted(async () => {
try {
const d = await apiGet('/api/admin/dashboard')
const stats = await apiGet('/api/admin/ai-chat/stats').catch(() => ({}))
s.value = {
newUsers: d?.today?.newUsers ?? '-',
activeUsers: d?.today?.activeUsers ?? '-',
newOrders: d?.today?.newOrders ?? '-',
aiChatToday: stats?.totalQuestions ?? '-',
aiChatUsers: stats?.totalUsers ?? '-',
aiChatShares: stats?.totalShares ?? '-',
}
} catch (e) { console.error(e) }
})
</script>
<style scoped>
.cards { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:12px; }
.num { font-size:26px; font-weight:700; color:#1f2333; }
.num.ok { color:#18a058; }
.lbl { font-size:12px; color:#8a8fa3; margin-top:4px; }
</style>