245 lines
8.6 KiB
JavaScript
245 lines
8.6 KiB
JavaScript
// 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">×</span>
|
||
</button>
|
||
`;
|
||
|
||
document.body.appendChild(alertDiv);
|
||
|
||
// 3秒后自动消失
|
||
setTimeout(() => {
|
||
alertDiv.remove();
|
||
}, 3000);
|
||
}
|
||
});
|