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