feat: 注入静态全文搜索组件并优化暗黑样式
This commit is contained in:
parent
35c0537439
commit
9829cacf4b
@ -41,6 +41,8 @@
|
|||||||
|
|
||||||
- **Task 25**: 引入 Pagefind 依赖,并重构 build 工作流实现自动建立本地离线搜索索引。
|
- **Task 25**: 引入 Pagefind 依赖,并重构 build 工作流实现自动建立本地离线搜索索引。
|
||||||
|
|
||||||
|
- **Task 26**: 构建 `Search.astro` 搜索框并挂载至全局侧边栏,完成暗黑主题样式覆盖。
|
||||||
|
|
||||||
---
|
---
|
||||||
**🔄 当前状态**: 系统架构稳定,UI 交互流畅。所有功能模块已固化至 Git 版本控制。
|
**🔄 当前状态**: 系统架构稳定,UI 交互流畅。所有功能模块已固化至 Git 版本控制。
|
||||||
**📝 下一步计划**: 等待分配新需求(如:全文搜索、SEO 优化等)。
|
**📝 下一步计划**: 等待分配新需求(如:全文搜索、SEO 优化等)。
|
||||||
58
src/components/Search.astro
Normal file
58
src/components/Search.astro
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
// 动态加载 Pagefind UI 的包装组件
|
||||||
|
---
|
||||||
|
<div id="search" class="mb-4"></div>
|
||||||
|
|
||||||
|
<script is:inline>
|
||||||
|
document.addEventListener('astro:page-load', async () => {
|
||||||
|
const searchDiv = document.getElementById('search');
|
||||||
|
if (!searchDiv || searchDiv.innerHTML.trim() !== '') return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 尝试拉取 Pagefind 资源 (仅在 build/preview 模式下存在)
|
||||||
|
const response = await fetch('/pagefind/pagefind-ui.js');
|
||||||
|
if (response.ok) {
|
||||||
|
const link = document.createElement('link');
|
||||||
|
link.rel = 'stylesheet';
|
||||||
|
link.href = '/pagefind/pagefind-ui.css';
|
||||||
|
document.head.appendChild(link);
|
||||||
|
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.src = '/pagefind/pagefind-ui.js';
|
||||||
|
script.onload = () => {
|
||||||
|
new window.PagefindUI({
|
||||||
|
element: "#search",
|
||||||
|
showSubResults: true,
|
||||||
|
showImages: false,
|
||||||
|
bundlePath: "/pagefind/"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
document.head.appendChild(script);
|
||||||
|
} else {
|
||||||
|
searchDiv.innerHTML = '<div class="text-xs text-gray-500 bg-gray-100 dark:bg-gray-800/50 p-2 text-center rounded-lg border border-gray-200 dark:border-gray-700">🔍 搜索功能将在 Build 后激活</div>';
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.warn('Pagefind 尚未初始化');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style is:global>
|
||||||
|
/* Pagefind 极客暗黑风主题定制 */
|
||||||
|
#search {
|
||||||
|
--pagefind-ui-scale: 0.8;
|
||||||
|
--pagefind-ui-primary: #3b82f6;
|
||||||
|
--pagefind-ui-text: #4b5563;
|
||||||
|
--pagefind-ui-background: #ffffff;
|
||||||
|
--pagefind-ui-border: #e5e7eb;
|
||||||
|
--pagefind-ui-border-radius: 8px;
|
||||||
|
}
|
||||||
|
.dark #search {
|
||||||
|
--pagefind-ui-primary: #60a5fa;
|
||||||
|
--pagefind-ui-text: #d1d5db;
|
||||||
|
--pagefind-ui-background: #1f2937;
|
||||||
|
--pagefind-ui-border: #374151;
|
||||||
|
}
|
||||||
|
.pagefind-ui__drawer { max-height: 400px; overflow-y: auto; }
|
||||||
|
.pagefind-ui__result-excerpt { color: var(--pagefind-ui-text) !important; opacity: 0.7; }
|
||||||
|
</style>
|
||||||
@ -1,10 +1,12 @@
|
|||||||
---
|
---
|
||||||
import { getCollection } from 'astro:content';
|
import { getCollection } from 'astro:content';
|
||||||
|
import Search from './Search.astro';
|
||||||
// Astro v6 中获取所有文档
|
// Astro v6 中获取所有文档
|
||||||
const docs = await getCollection('docs');
|
const docs = await getCollection('docs');
|
||||||
---
|
---
|
||||||
<aside class="w-64 bg-gray-50 dark:bg-gray-800/30 border-r border-gray-200 dark:border-gray-800 h-screen sticky top-0 overflow-y-auto p-6 flex-shrink-0 hidden md:flex flex-col">
|
<aside class="w-64 bg-gray-50 dark:bg-gray-800/30 border-r border-gray-200 dark:border-gray-800 h-screen sticky top-0 overflow-y-auto p-6 flex-shrink-0 hidden md:flex flex-col">
|
||||||
<div class="font-extrabold text-lg mb-6 text-gray-900 dark:text-white tracking-tight">📚 知识库导航</div>
|
<div class="font-extrabold text-lg mb-6 text-gray-900 dark:text-white tracking-tight">📚 知识库导航</div>
|
||||||
|
<Search />
|
||||||
<nav class="flex flex-col gap-1.5">
|
<nav class="flex flex-col gap-1.5">
|
||||||
<a href="/" class="text-sm font-medium text-gray-600 dark:text-gray-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors px-2 py-1.5">
|
<a href="/" class="text-sm font-medium text-gray-600 dark:text-gray-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors px-2 py-1.5">
|
||||||
🏠 返回首页
|
🏠 返回首页
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user