// app/static/js/book_ranking.js
document.addEventListener('DOMContentLoaded', function() {
const timeRangeSelect = document.getElementById('time-range');
const limitSelect = document.getElementById('limit-count');
let rankingChart = null;
// 初始加载
loadRankingData();
// 添加事件监听器
timeRangeSelect.addEventListener('change', loadRankingData);
limitSelect.addEventListener('change', loadRankingData);
function loadRankingData() {
const timeRange = timeRangeSelect.value;
const limit = limitSelect.value;
// 显示加载状态
document.getElementById('ranking-table-body').innerHTML = `
正在打开书页... |
`;
// 调用API获取数据
fetch(`/statistics/api/book-ranking?time_range=${timeRange}&limit=${limit}`)
.then(response => response.json())
.then(data => {
// 更新表格
updateRankingTable(data);
// 更新图表
updateRankingChart(data);
})
.catch(error => {
console.error('加载排行数据失败:', error);
document.getElementById('ranking-table-body').innerHTML = `
| 加载数据失败,请稍后重试 |
`;
});
}
function updateRankingTable(data) {
const tableBody = document.getElementById('ranking-table-body');
if (data.length === 0) {
tableBody.innerHTML = `
| 暂无数据 |
`;
return;
}
let tableHtml = '';
data.forEach((book, index) => {
// 给每个单元格添加适当的类名以匹配CSS
tableHtml += `
| ${index + 1} |
|
${book.title} |
${book.author} |
${book.borrow_count} |
`;
});
tableBody.innerHTML = tableHtml;
}
function updateRankingChart(data) {
// 销毁旧图表
if (rankingChart) {
rankingChart.destroy();
}
if (data.length === 0) {
return;
}
// 准备图表数据
const labels = data.map(book => book.title);
const borrowCounts = data.map(book => book.borrow_count);
// 创建图表
const ctx = document.getElementById('ranking-chart').getContext('2d');
rankingChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: '借阅次数',
data: borrowCounts,
backgroundColor: 'rgba(183, 110, 121, 0.6)', // 玫瑰金色调
borderColor: 'rgba(140, 45, 90, 1)', // 浆果红
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: '借阅次数',
font: {
family: "'Open Sans', sans-serif",
size: 13
},
color: '#5D5053'
},
ticks: {
color: '#8A797C',
font: {
family: "'Open Sans', sans-serif"
}
},
grid: {
color: 'rgba(211, 211, 211, 0.3)'
}
},
x: {
title: {
display: true,
text: '图书',
font: {
family: "'Open Sans', sans-serif",
size: 13
},
color: '#5D5053'
},
ticks: {
color: '#8A797C',
font: {
family: "'Open Sans', sans-serif"
}
},
grid: {
display: false
}
}
},
plugins: {
legend: {
display: false
},
title: {
display: true,
text: '热门图书借阅排行',
font: {
family: "'Playfair Display', serif",
size: 16,
weight: 'bold'
},
color: '#B76E79'
}
}
}
});
}
});