Compare commits

..
3 Commits
Author SHA1 Message Date
hz4th_coder 3f9848c635 fix: 修复内容库显示问题
- 产品名称(product_names)不再自动填充为网页标题
- 内容库显示搜索标题(search_title)作为主标题
- 产品名称单独显示(如果有关联)
2026-07-14 11:29:22 +08:00
hz4th_coder dd42957a48 fix: 默认勾选'抓取后自动保存到内容库' 2026-07-14 11:14:59 +08:00
hz4th_coder 0229f2dfcf fix: 后台任务列表自动刷新(每3秒) 2026-07-14 11:07:29 +08:00
5 changed files with 35 additions and 9 deletions
+5 -2
View File
@@ -102,15 +102,18 @@ class BackgroundTaskService:
# 检查URL是否已存在 # 检查URL是否已存在
existing = db.search_articles(url) existing = db.search_articles(url)
if not any(a.get('url') == url for a in existing): if not any(a.get('url') == url for a in existing):
# 获取抓取到的网页标题
page_title = fetch_result.get('title', '') or title
article_id = db.add_article( article_id = db.add_article(
product_names=[title], product_names=[], # 产品名称留空,后续手动关联
category=category or '', category=category or '',
keywords=keywords or [], keywords=keywords or [],
summary=content[:200], summary=content[:200],
content=content, content=content,
source=url, source=url,
url=url, url=url,
search_title=title search_title=title # 搜索结果的标题
) )
if article_id: if article_id:
saved_count += 1 saved_count += 1
+2 -2
View File
@@ -250,7 +250,7 @@
color: #667eea; color: #667eea;
} }
.article-page-title { .article-products {
font-size: 13px; font-size: 13px;
color: #666; color: #666;
margin-bottom: 10px; margin-bottom: 10px;
@@ -259,7 +259,7 @@
border-radius: 4px; border-radius: 4px;
} }
.article-page-title i { .article-products i {
color: #4caf50; color: #4caf50;
} }
+4 -4
View File
@@ -110,7 +110,7 @@ function displayArticles() {
const productNames = safeParseJSON(article.product_names, []); const productNames = safeParseJSON(article.product_names, []);
const keywords = safeParseJSON(article.keywords, []); const keywords = safeParseJSON(article.keywords, []);
// 确定显示标题:优先 search_title,其次 product_names,最后来源 // 确定显示标题:优先 search_title(搜索标题),其次 product_names(产品名称),最后来源
const displayTitle = article.search_title || productNames.join(', ') || article.source || '未命名'; const displayTitle = article.search_title || productNames.join(', ') || article.source || '未命名';
return ` return `
@@ -133,9 +133,9 @@ function displayArticles() {
</button> </button>
</div> </div>
</div> </div>
${article.search_title && productNames.length > 0 && article.search_title !== productNames.join(', ') ? ` ${productNames.length > 0 ? `
<div class="article-page-title"> <div class="article-products">
<i class="ri-article-line"></i> 网页标题: ${escapeHtml(productNames.join(', '))} <i class="ri-price-tag-3-line"></i> 产品: ${escapeHtml(productNames.join(', '))}
</div> </div>
` : ''} ` : ''}
<div class="article-meta"> <div class="article-meta">
+23
View File
@@ -8,6 +8,7 @@ let currentResultIndex = -1;
// 后台任务相关 // 后台任务相关
let currentTaskId = null; let currentTaskId = null;
let taskPollInterval = null; let taskPollInterval = null;
let autoRefreshTasksInterval = null; // 自动刷新任务列表
// 页面加载初始化 // 页面加载初始化
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
@@ -21,6 +22,9 @@ document.addEventListener('DOMContentLoaded', () => {
// 加载失败URL和后台任务 // 加载失败URL和后台任务
loadFailedUrls(); loadFailedUrls();
loadBackgroundTasks(); loadBackgroundTasks();
// 启动自动刷新后台任务列表(每3秒)
startAutoRefreshTasks();
}); });
// 执行搜索 // 执行搜索
@@ -861,4 +865,23 @@ async function clearCompletedTasks() {
} catch (error) { } catch (error) {
showToast('清理任务出错', 'error'); showToast('清理任务出错', 'error');
} }
}
// 启动自动刷新后台任务列表
function startAutoRefreshTasks() {
if (autoRefreshTasksInterval) {
clearInterval(autoRefreshTasksInterval);
}
autoRefreshTasksInterval = setInterval(() => {
loadBackgroundTasks();
}, 3000); // 每3秒刷新一次
}
// 停止自动刷新
function stopAutoRefreshTasks() {
if (autoRefreshTasksInterval) {
clearInterval(autoRefreshTasksInterval);
autoRefreshTasksInterval = null;
}
} }
+1 -1
View File
@@ -51,7 +51,7 @@
<span>搜索后自动抓取内容</span> <span>搜索后自动抓取内容</span>
</label> </label>
<label class="checkbox-label"> <label class="checkbox-label">
<input type="checkbox" id="auto-save"> <input type="checkbox" id="auto-save" checked>
<span>抓取后自动保存到内容库</span> <span>抓取后自动保存到内容库</span>
</label> </label>
</div> </div>