hn_cloud_web/public/html/index.html

237 lines
8.6 KiB
HTML
Raw Normal View History

2025-12-04 16:21:08 +08:00
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>仪表盘</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.8/chart.umd.min.js"></script>
<style type="text/tailwindcss">
@layer utilities {
.card-hover {
transition: all 0.3s ease;
}
.card-hover:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(22, 93, 255, 0.1);
}
}
</style>
</head>
<body class="bg-neutral text-gray-800 p-4 sm:p-6 lg:p-8">
<!-- 页面标题 -->
<div class="mb-8">
<h1 class="text-[clamp(1.5rem,3vw,2.5rem)] font-bold">仪表盘</h1>
<p class="text-gray-500 mt-1">欢迎回来,管理员!这里是您的系统概览</p>
</div>
<!-- 数据卡片 - 核心指标 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
<!-- 总用户数 -->
<div class="bg-white rounded-xl shadow-sm p-6 card-hover">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500 text-sm">总用户数</p>
<h3 class="text-2xl font-bold mt-2">12,458</h3>
<p class="text-green-500 text-sm mt-2 flex items-center">
<i class="fa fa-arrow-up mr-1"></i> 12.5%
<span class="text-gray-500 ml-1">较上月</span>
</p>
</div>
<div class="h-12 w-12 rounded-full bg-blue-100 flex items-center justify-center text-primary">
<i class="fa fa-users text-xl"></i>
</div>
</div>
</div>
<!-- 新增用户 -->
<div class="bg-white rounded-xl shadow-sm p-6 card-hover">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500 text-sm">本月新增用户</p>
<h3 class="text-2xl font-bold mt-2">386</h3>
<p class="text-green-500 text-sm mt-2 flex items-center">
<i class="fa fa-arrow-up mr-1"></i> 8.2%
<span class="text-gray-500 ml-1">较上月</span>
</p>
</div>
<div class="h-12 w-12 rounded-full bg-green-100 flex items-center justify-center text-green-600">
<i class="fa fa-user-plus text-xl"></i>
</div>
</div>
</div>
<!-- 活跃用户 -->
<div class="bg-white rounded-xl shadow-sm p-6 card-hover">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500 text-sm">今日活跃用户</p>
<h3 class="text-2xl font-bold mt-2">2,521</h3>
<p class="text-green-500 text-sm mt-2 flex items-center">
<i class="fa fa-arrow-up mr-1"></i> 5.3%
<span class="text-gray-500 ml-1">较昨日</span>
</p>
</div>
<div class="h-12 w-12 rounded-full bg-purple-100 flex items-center justify-center text-purple-600">
<i class="fa fa-eye text-xl"></i>
</div>
</div>
</div>
<!-- 付费用户 -->
<div class="bg-white rounded-xl shadow-sm p-6 card-hover">
<div class="flex items-center justify-between">
<div>
<p class="text-gray-500 text-sm">付费用户数</p>
<h3 class="text-2xl font-bold mt-2">256</h3>
<p class="text-red-500 text-sm mt-2 flex items-center">
<i class="fa fa-arrow-down mr-1"></i> 2.1%
<span class="text-gray-500 ml-1">较昨日</span>
</p>
</div>
<div class="h-12 w-12 rounded-full bg-orange-100 flex items-center justify-center text-orange-600">
<i class="fa fa-credit-card text-xl"></i>
</div>
</div>
</div>
</div>
<!-- 用户增长趋势图表 -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
<!-- 图表区域 -->
<div class="bg-white rounded-xl shadow-sm p-6 lg:col-span-2">
<div class="flex items-center justify-between mb-6">
<h3 class="font-semibold text-lg">用户增长趋势</h3>
<div class="flex space-x-2">
<button class="px-3 py-1 text-sm bg-primary/10 text-primary rounded-md hover:bg-primary/20 transition">本周</button>
<button class="px-3 py-1 text-sm text-gray-500 hover:bg-gray-100 rounded-md transition">本月</button>
<button class="px-3 py-1 text-sm text-gray-500 hover:bg-gray-100 rounded-md transition">全年</button>
</div>
</div>
<div class="h-80">
<canvas id="userGrowthChart"></canvas>
</div>
</div>
<!-- 用户分布 -->
<div class="bg-white rounded-xl shadow-sm p-6">
<h3 class="font-semibold text-lg mb-6">用户分布</h3>
<div class="space-y-4">
<div>
<div class="flex justify-between mb-1">
<span class="text-sm font-medium">普通用户</span>
<span class="text-sm">85%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-primary h-2 rounded-full" style="width: 85%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-1">
<span class="text-sm font-medium">VIP用户</span>
<span class="text-sm">12%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-purple-500 h-2 rounded-full" style="width: 12%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-1">
<span class="text-sm font-medium">管理员</span>
<span class="text-sm">2%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-green-500 h-2 rounded-full" style="width: 2%"></div>
</div>
</div>
<div>
<div class="flex justify-between mb-1">
<span class="text-sm font-medium">测试账号</span>
<span class="text-sm">1%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-yellow-500 h-2 rounded-full" style="width: 1%"></div>
</div>
</div>
<div class="mt-8 pt-6 border-t">
<h4 class="font-medium mb-4">用户活跃度</h4>
<div class="grid grid-cols-2 gap-4">
<div class="bg-gray-50 p-3 rounded-lg text-center">
<p class="text-xs text-gray-500">日活跃率</p>
<p class="text-xl font-bold text-primary">28.5%</p>
</div>
<div class="bg-gray-50 p-3 rounded-lg text-center">
<p class="text-xs text-gray-500">周活跃率</p>
<p class="text-xl font-bold text-primary">65.3%</p>
</div>
<div class="bg-gray-50 p-3 rounded-lg text-center">
<p class="text-xs text-gray-500">月活跃率</p>
<p class="text-xl font-bold text-primary">82.1%</p>
</div>
<div class="bg-gray-50 p-3 rounded-lg text-center">
<p class="text-xs text-gray-500">留存率</p>
<p class="text-xl font-bold text-primary">78.9%</p>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// 初始化用户增长图表
document.addEventListener('DOMContentLoaded', () => {
const ctx = document.getElementById('userGrowthChart').getContext('2d');
const userGrowthChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
datasets: [
{
label: '新增用户',
data: [120, 190, 150, 250, 220, 300, 320],
borderColor: '#165DFF',
backgroundColor: 'rgba(22, 93, 255, 0.1)',
fill: true,
tension: 0.4
},
{
label: '活跃用户',
data: [850, 920, 880, 950, 980, 1100, 1050],
borderColor: '#36CFC9',
backgroundColor: 'transparent',
borderDash: [5, 5],
tension: 0.4
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
}
},
scales: {
y: {
beginAtZero: true
}
},
animation: {
duration: 2000,
easing: 'easeOutQuart'
}
}
});
});
</script>
</body>
</html>