```html
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Dashboard GSV</title>
<!-- Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
background: #f5f6fa;
}
h2 {
text-align: center;
padding: 20px;
}
.container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
padding: 20px;
}
.card {
background: #fff;
border-radius: 12px;
padding: 15px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
canvas {
width: 100% !important;
height: 300px !important;
}
@media (max-width: 768px) {
.container {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<h2>📊 Dashboard GSV Logistics</h2>
<div class="container">
<div class="card">
<h3>GSV theo tháng</h3>
<canvas id="gsvLineChart"></canvas>
</div>
<div class="card">
<h3>BIKE vs TRUCK</h3>
<canvas id="serviceChart"></canvas>
</div>
<div class="card">
<h3>Phân bổ vùng</h3>
<canvas id="regionChart"></canvas>
</div>
<div class="card">
<h3>Hiệu suất (AR / FR)</h3>
<canvas id="perfChart"></canvas>
</div>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
const labels = ['T10/25', 'T11/25', 'T12/25', 'T1/26', 'T2/26'];
// GSV Line
new Chart(document.getElementById('gsvLineChart'), {
type: 'line',
data: {
labels: labels,
datasets: [{
label: 'GSV (Triệu)',
data: [102.3, 118.9, 207.2, 276.0, 490.0],
borderColor: '#FF7F0E',
tension: 0.3
}]
}
});
// Service Bar
new Chart(document.getElementById('serviceChart'), {
type: 'bar',
data: {
labels: labels,
datasets: [
{
label: 'BIKE',
data: [101.4, 107.5, 197.7, 141.6, 170.7],
backgroundColor: '#1F77B4'
},
{
label: 'TRUCK',
data: [0.9, 11.4, 9.5, 134.4, 319.3],
backgroundColor: '#FF7F0E'
}
]
}
});
// Region Doughnut
new Chart(document.getElementById('regionChart'), {
type: 'doughnut',
data: {
labels: ['Hà Nội', 'Sà i Gòn', 'Cần Thơ', 'Khác'],
datasets: [{
data: [415.6, 30.6, 23.7, 20.1],
backgroundColor: ['#1F77B4', '#FF7F0E', '#2CA02C', '#C7C7C7']
}]
}
});
// Performance Line
new Chart(document.getElementById('perfChart'), {
type: 'line',
data: {
labels: labels,
datasets: [
{
label: 'AR (%)',
data: [82.8, 74.7, 85.4, 84.5, 76.5],
borderColor: '#1F77B4',
tension: 0.3
},
{
label: 'FR (%)',
data: [67.8, 60.8, 70.9, 66.4, 62.1],
borderColor: '#FF7F0E',
tension: 0.3
}
]
}
});
});
</script>
</body>
</html>
```