// API基础地址 const API_BASE = ''; // 状态 let articles = []; let currentPage = 1; let pageSize = 20; let totalCount = 0; let selectedIds = new Set(); let currentArticleId = null; // 页面加载 document.addEventListener('DOMContentLoaded', () => { loadArticles(); loadCategories(); // 搜索防抖 let searchTimeout; document.getElementById('search-input').addEventListener('input', (e) => { clearTimeout(searchTimeout); searchTimeout = setTimeout(() => { currentPage = 1; loadArticles(); }, 300); }); // 分类筛选 document.getElementById('category-filter').addEventListener('change', () => { currentPage = 1; loadArticles(); }); }); // 加载文章列表 async function loadArticles() { const keyword = document.getElementById('search-input').value.trim(); const category = document.getElementById('category-filter').value; const params = new URLSearchParams({ limit: pageSize, offset: (currentPage - 1) * pageSize }); if (keyword) { const response = await fetch(`${API_BASE}/api/articles/search?q=${encodeURIComponent(keyword)}${category ? '&category=' + encodeURIComponent(category) : ''}`); const data = await response.json(); if (data.success) { articles = data.articles; totalCount = data.count; } } else { const response = await fetch(`${API_BASE}/api/articles?${params.toString()}`); const data = await response.json(); if (data.success) { articles = data.articles; totalCount = data.count; } } displayArticles(); updatePagination(); updateStats(); } // 加载分类列表 async function loadCategories() { try { const response = await fetch(`${API_BASE}/api/articles?limit=1000`); const data = await response.json(); if (data.success) { const categories = new Set(); data.articles.forEach(a => { if (a.category) categories.add(a.category); }); const select = document.getElementById('category-filter'); select.innerHTML = '' + Array.from(categories).map(c => ``).join(''); } } catch (error) { console.error('加载分类失败:', error); } } // 显示文章列表 function displayArticles() { const container = document.getElementById('articles-list'); if (articles.length === 0) { container.innerHTML = '
${escapeHtml(productNames.join(', '))}
${escapeHtml(keywords.join(', '))}
${escapeHtml(article.summary || '无')}