diff --git a/static/css/search.css b/static/css/search.css
index e9ec94a..82e74d6 100644
--- a/static/css/search.css
+++ b/static/css/search.css
@@ -217,6 +217,11 @@
background: #f0fdf4;
}
+.result-item.exists {
+ border-color: #f59e0b;
+ background: #fffbeb;
+}
+
.result-item.fetched {
border-color: #3b82f6;
}
diff --git a/static/js/search.js b/static/js/search.js
index 3ab3319..b35f601 100644
--- a/static/js/search.js
+++ b/static/js/search.js
@@ -127,6 +127,21 @@ function displayResults() {
`).join('');
}
+// 检查URL是否已在内容库
+async function checkUrlExists(url) {
+ try {
+ const response = await fetch(`${API_BASE}/api/articles/search?q=${encodeURIComponent(url)}`);
+ const data = await response.json();
+ if (data.success && data.articles && data.articles.length > 0) {
+ // 检查是否有完全匹配的 URL
+ return data.articles.some(a => a.url === url);
+ }
+ } catch (error) {
+ console.error('检查URL失败:', error);
+ }
+ return false;
+}
+
// 抓取单个结果
async function fetchResult(index) {
const result = searchResults[index];
@@ -134,6 +149,28 @@ async function fetchResult(index) {
const btn = document.getElementById(`fetch-btn-${index}`);
btn.disabled = true;
+ btn.innerHTML = ' 检查中...';
+
+ // 先检查内容库是否已存在
+ const exists = await checkUrlExists(result.url);
+ if (exists) {
+ searchResults[index].fetched = true;
+ searchResults[index].saved = true;
+ searchResults[index].content = '[内容库中已存在此链接]';
+ btn.innerHTML = ' 已存在';
+ btn.className = 'btn btn-sm btn-warning';
+
+ const saveBtn = document.getElementById(`save-btn-${index}`);
+ saveBtn.disabled = true;
+ saveBtn.innerHTML = ' 已存在';
+
+ const item = document.getElementById(`result-${index}`);
+ item.classList.add('saved');
+
+ showToast('该链接已在内容库中', 'warning');
+ return;
+ }
+
btn.innerHTML = ' 抓取中...';
try {
@@ -178,10 +215,16 @@ async function saveResult(index) {
const result = searchResults[index];
if (!result) return;
+ // 如果已经保存(可能是内容库中已存在),直接返回
+ if (result.saved) {
+ return;
+ }
+
// 如果未抓取,先抓取
if (!result.fetched) {
await fetchResult(index);
- if (!searchResults[index].fetched) return;
+ // 抓取后如果已标记为 saved(内容库已存在),不继续保存
+ if (searchResults[index].saved) return;
}
const btn = document.getElementById(`save-btn-${index}`);