diff --git a/ghproxy/public/search.html b/ghproxy/public/search.html index 71c2d8e..fca96d1 100644 --- a/ghproxy/public/search.html +++ b/ghproxy/public/search.html @@ -603,8 +603,17 @@ showLoading(); try { - console.log('执行搜索:', query); - const response = await fetch(`/search?q=${encodeURIComponent(query)}&page=${currentPage}&page_size=25`); + // 处理搜索查询 + let searchQuery = query; + let targetRepo = ''; + if (query.includes('/')) { + const [namespace, repo] = query.split('/'); + searchQuery = namespace; // 只使用斜杠前面的用户空间 + targetRepo = repo.toLowerCase(); // 保存目标仓库名用于排序 + } + + console.log('执行搜索:', searchQuery); + const response = await fetch(`/search?q=${encodeURIComponent(searchQuery)}&page=${currentPage}&page_size=25`); const data = await response.json(); if (!response.ok) { @@ -617,7 +626,8 @@ totalPages = Math.ceil(data.count / 25); updatePagination(); - displayResults(data.results); + // 传入目标仓库名进行排序 + displayResults(data.results, targetRepo); } catch (error) { console.error('搜索错误:', error); showToast(error.message || '搜索失败,请稍后重试'); @@ -693,7 +703,7 @@ } } - function displayResults(results) { + function displayResults(results, targetRepo = '') { const resultsContainer = document.getElementById('searchResults'); resultsContainer.innerHTML = ''; @@ -702,11 +712,25 @@ return; } - // 对结果进行排序:官方镜像优先,然后按照拉取次数排序 + // 对结果进行排序 results.sort((a, b) => { + // 如果有目标仓库名,将匹配的排在最前面 + if (targetRepo) { + const aName = (a.name || a.repo_name || '').toLowerCase(); + const bName = (b.name || b.repo_name || '').toLowerCase(); + const aMatch = aName === targetRepo || aName.endsWith('/' + targetRepo); + const bMatch = bName === targetRepo || bName.endsWith('/' + targetRepo); + + if (aMatch && !bMatch) return -1; + if (!aMatch && bMatch) return 1; + } + + // 其次按照官方镜像排序 if (a.is_official !== b.is_official) { return b.is_official - a.is_official; } + + // 最后按照拉取次数排序 return b.pull_count - a.pull_count; });