Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f9848c635 | ||
|
|
dd42957a48 | ||
|
|
0229f2dfcf |
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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();
|
||||||
});
|
});
|
||||||
|
|
||||||
// 执行搜索
|
// 执行搜索
|
||||||
@@ -862,3 +866,22 @@ async function clearCompletedTasks() {
|
|||||||
showToast('清理任务出错', '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>
|
<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>
|
||||||
|
|||||||
Reference in New Issue
Block a user