2025-07-09 05:22:28 +08:00

279 lines
8.0 KiB
JavaScript

// 浏览历史页面JavaScript
let selectedItems = [];
let isSelectAll = false;
document.addEventListener('DOMContentLoaded', function() {
// 初始化事件监听
initEventListeners();
});
function initEventListeners() {
// 复选框变化事件
document.querySelectorAll('.history-checkbox').forEach(checkbox => {
checkbox.addEventListener('change', function() {
updateSelectedItems();
});
});
}
function updateSelectedItems() {
selectedItems = [];
document.querySelectorAll('.history-checkbox:checked').forEach(checkbox => {
selectedItems.push(parseInt(checkbox.value));
});
// 更新按钮状态
const batchBtn = document.querySelector('[onclick="batchRemove()"]');
if (batchBtn) {
batchBtn.disabled = selectedItems.length === 0;
}
}
function toggleSelectAll() {
isSelectAll = !isSelectAll;
const checkboxes = document.querySelectorAll('.history-checkbox');
checkboxes.forEach(checkbox => {
checkbox.checked = isSelectAll;
});
updateSelectedItems();
// 更新按钮文本
const selectAllBtn = document.querySelector('[onclick="toggleSelectAll()"]');
if (selectAllBtn) {
selectAllBtn.innerHTML = isSelectAll ?
'<i class="bi bi-square"></i> 取消全选' :
'<i class="bi bi-check-square"></i> 全选';
}
}
function removeHistory(productId) {
if (confirm('确定要删除这个浏览记录吗?')) {
fetch('/history/remove', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: productId
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
showSuccessMessage(data.message);
// 移除商品卡片
const itemElement = document.querySelector(`[data-product-id="${productId}"]`);
if (itemElement) {
itemElement.remove();
}
// 更新历史数量
updateHistoryCount();
// 检查是否为空
checkEmptyState();
} else {
showErrorMessage(data.message);
}
})
.catch(error => {
console.error('Error:', error);
showErrorMessage('操作失败,请稍后再试');
});
}
}
function batchRemove() {
if (selectedItems.length === 0) {
showErrorMessage('请选择要删除的商品');
return;
}
const modal = new bootstrap.Modal(document.getElementById('confirmModal'));
document.getElementById('confirmMessage').textContent =
`确定要删除这 ${selectedItems.length} 个浏览记录吗?`;
document.getElementById('confirmBtn').onclick = function() {
performBatchRemove();
modal.hide();
};
modal.show();
}
function performBatchRemove() {
fetch('/history/batch-remove', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_ids: selectedItems
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
showSuccessMessage(data.message);
// 移除选中的商品卡片
selectedItems.forEach(productId => {
const itemElement = document.querySelector(`[data-product-id="${productId}"]`);
if (itemElement) {
itemElement.remove();
}
});
// 重置选择状态
selectedItems = [];
isSelectAll = false;
updateSelectedItems();
// 更新历史数量
updateHistoryCount();
// 检查是否为空
checkEmptyState();
} else {
showErrorMessage(data.message);
}
})
.catch(error => {
console.error('Error:', error);
showErrorMessage('批量删除失败,请稍后再试');
});
}
function clearHistory() {
if (confirm('确定要清空所有浏览历史吗?此操作不可恢复。')) {
fetch('/history/clear', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
if (data.success) {
showSuccessMessage(data.message);
// 重新加载页面或显示空状态
location.reload();
} else {
showErrorMessage(data.message);
}
})
.catch(error => {
console.error('Error:', error);
showErrorMessage('清空历史失败,请稍后再试');
});
}
}
function addToCart(productId) {
// 调用购物车添加功能
fetch('/cart/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: productId,
quantity: 1
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
showSuccessMessage(data.message);
// 更新购物车数量
if (typeof updateCartBadge === 'function') {
updateCartBadge(data.cart_count);
}
} else {
showErrorMessage(data.message);
}
})
.catch(error => {
console.error('Error:', error);
showErrorMessage('加入购物车失败,请稍后再试');
});
}
function addToFavorites(productId) {
fetch('/favorite/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
product_id: productId
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
showSuccessMessage(data.message);
} else {
showErrorMessage(data.message);
}
})
.catch(error => {
console.error('Error:', error);
showErrorMessage('收藏失败,请稍后再试');
});
}
function updateHistoryCount() {
fetch('/history/count')
.then(response => response.json())
.then(data => {
if (data.success) {
// 更新历史数量显示
const badge = document.querySelector('.badge.bg-secondary');
if (badge) {
badge.textContent = `${data.history_count} 件商品`;
}
}
})
.catch(error => {
console.error('Error:', error);
});
}
function checkEmptyState() {
const itemsContainer = document.querySelector('.row');
const items = itemsContainer.querySelectorAll('.history-item');
if (items.length === 0) {
// 显示空状态
itemsContainer.innerHTML = `
<div class="col-12">
<div class="empty-state">
<div class="text-center py-5">
<i class="bi bi-clock-history display-1 text-muted"></i>
<h4 class="mt-3 text-muted">还没有浏览任何商品</h4>
<p class="text-muted">去逛逛,看看有什么好商品~</p>
<a href="/" class="btn btn-primary">
<i class="bi bi-house"></i> 去首页逛逛
</a>
</div>
</div>
</div>
`;
}
}
function showSuccessMessage(message) {
// 使用现有的消息提示函数
if (typeof showMessage === 'function') {
showMessage(message, 'success');
} else {
alert(message);
}
}
function showErrorMessage(message) {
// 使用现有的消息提示函数
if (typeof showMessage === 'function') {
showMessage(message, 'error');
} else {
alert(message);
}
}