Book_system/app/static/js/borrow_management.js
superlishunqin 29914a4178 0506
2025-05-06 12:01:11 +08:00

245 lines
8.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// borrow_management.js
document.addEventListener('DOMContentLoaded', function() {
// 归还图书功能
const returnButtons = document.querySelectorAll('.return-btn');
const returnModal = document.getElementById('returnModal');
const returnBookTitle = document.getElementById('returnBookTitle');
const confirmReturnButton = document.getElementById('confirmReturn');
let currentBorrowId = null;
returnButtons.forEach(button => {
button.addEventListener('click', function() {
const borrowId = this.getAttribute('data-id');
const bookTitle = this.getAttribute('data-title');
currentBorrowId = borrowId;
returnBookTitle.textContent = bookTitle;
// 使用 Bootstrap 的 jQuery 方法显示模态框
$('#returnModal').modal('show');
});
});
confirmReturnButton.addEventListener('click', function() {
if (!currentBorrowId) return;
// 发送归还请求
fetch(`/borrow/return/${currentBorrowId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify({})
})
.then(response => response.json())
.then(data => {
// 隐藏模态框
$('#returnModal').modal('hide');
if (data.success) {
// 显示成功消息
showAlert('success', data.message);
// 重新加载页面以更新借阅状态
setTimeout(() => window.location.reload(), 1500);
} else {
// 显示错误消息
showAlert('danger', data.message);
}
})
.catch(error => {
$('#returnModal').modal('hide');
showAlert('danger', '操作失败,请稍后重试');
console.error('Error:', error);
});
});
// 续借图书功能
const renewButtons = document.querySelectorAll('.renew-btn');
const renewModal = document.getElementById('renewModal');
const renewBookTitle = document.getElementById('renewBookTitle');
const confirmRenewButton = document.getElementById('confirmRenew');
renewButtons.forEach(button => {
button.addEventListener('click', function() {
const borrowId = this.getAttribute('data-id');
const bookTitle = this.getAttribute('data-title');
currentBorrowId = borrowId;
renewBookTitle.textContent = bookTitle;
// 使用 Bootstrap 的 jQuery 方法显示模态框
$('#renewModal').modal('show');
});
});
confirmRenewButton.addEventListener('click', function() {
if (!currentBorrowId) return;
// 发送续借请求
fetch(`/borrow/renew/${currentBorrowId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify({})
})
.then(response => response.json())
.then(data => {
// 隐藏模态框
$('#renewModal').modal('hide');
if (data.success) {
// 显示成功消息
showAlert('success', data.message);
// 重新加载页面以更新借阅状态
setTimeout(() => window.location.reload(), 1500);
} else {
// 显示错误消息
showAlert('danger', data.message);
}
})
.catch(error => {
$('#renewModal').modal('hide');
showAlert('danger', '操作失败,请稍后重试');
console.error('Error:', error);
});
});
// 逾期通知功能
const notifyButtons = document.querySelectorAll('.notify-btn');
const notifyModal = document.getElementById('notifyModal');
const notifyBookTitle = document.getElementById('notifyBookTitle');
const confirmNotifyButton = document.getElementById('confirmNotify');
notifyButtons.forEach(button => {
button.addEventListener('click', function() {
const borrowId = this.getAttribute('data-id');
const bookTitle = this.getAttribute('data-title');
currentBorrowId = borrowId;
notifyBookTitle.textContent = bookTitle;
// 使用 Bootstrap 的 jQuery 方法显示模态框
$('#notifyModal').modal('show');
});
});
confirmNotifyButton.addEventListener('click', function() {
if (!currentBorrowId) return;
// 发送通知请求
fetch(`/borrow/overdue/notify/${currentBorrowId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest'
},
body: JSON.stringify({})
})
.then(response => response.json())
.then(data => {
// 隐藏模态框
$('#notifyModal').modal('hide');
if (data.success) {
// 显示成功消息
showAlert('success', data.message);
// 禁用已点击的通知按钮
document.querySelector(`.notify-btn[data-id="${currentBorrowId}"]`).disabled = true;
} else {
// 显示错误消息
showAlert('danger', data.message);
}
})
.catch(error => {
$('#notifyModal').modal('hide');
showAlert('danger', '操作失败,请稍后重试');
console.error('Error:', error);
});
});
// 图书搜索功能
const bookSearchInput = document.getElementById('bookSearch');
const searchBookBtn = document.getElementById('searchBookBtn');
const bookSelect = document.getElementById('bookSelect');
function searchBooks() {
const searchTerm = bookSearchInput.value.trim();
if (searchTerm.length < 2) {
showAlert('warning', '请输入至少2个字符进行搜索');
return;
}
// 清空当前选项
bookSelect.innerHTML = '<option value="">正在搜索...</option>';
// 发送搜索请求
fetch(`/book/api/search?q=${encodeURIComponent(searchTerm)}`)
.then(response => response.json())
.then(data => {
bookSelect.innerHTML = '';
if (data.success && data.books.length > 0) {
// 添加找到的图书
data.books.forEach(book => {
const option = document.createElement('option');
option.value = book.id;
option.textContent = `${book.title} - ${book.author} (库存: ${book.stock})`;
// 如果库存为0禁用该选项
if (book.stock <= 0) {
option.disabled = true;
option.textContent += ' [无库存]';
}
bookSelect.appendChild(option);
});
} else {
// 未找到图书
const option = document.createElement('option');
option.value = '';
option.textContent = '未找到相关图书';
bookSelect.appendChild(option);
}
})
.catch(error => {
console.error('搜索图书时出错:', error);
bookSelect.innerHTML = '<option value="">搜索失败,请重试</option>';
});
}
// 绑定搜索按钮点击事件
searchBookBtn.addEventListener('click', searchBooks);
// 绑定回车键搜索
bookSearchInput.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
searchBooks();
}
});
// 显示提示消息
function showAlert(type, message) {
const alertDiv = document.createElement('div');
alertDiv.className = `alert alert-${type} alert-dismissible fade show fixed-top mx-auto mt-3`;
alertDiv.style.maxWidth = '500px';
alertDiv.style.zIndex = '9999';
alertDiv.innerHTML = `
${message}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
`;
document.body.appendChild(alertDiv);
// 3秒后自动消失
setTimeout(() => {
alertDiv.remove();
}, 3000);
}
});