| <template> | |
| <div id="home" class="flex size-full items-center justify-center dark:bg-black"> | |
| <div class="mt-36 flex w-full flex-col gap-4 p-4 sm:-mt-28 lg:max-w-3xl xl:max-w-4xl"> | |
| <div class="flex items-center justify-center gap-2"> | |
| <img :src="logoUrl" class="w-10" /> | |
| <span class="text-3xl font-bold dark:text-gray-100">AI Search</span> | |
| <t-tag variant="light" class="text-xs text-gray-500"></t-tag> | |
| </div> | |
| <SearchInputBar :autofocus="true" :loading="false" @search="search" /> | |
| <div class="my-2 flex flex-wrap items-center justify-center gap-4"> | |
| <SearchMode /> | |
| <SearCategory v-if="enableAdvanced" /> | |
| </div> | |
| <div class="flex w-full justify-center"> | |
| <div class="flex flex-wrap justify-center gap-2"> | |
| <t-tag | |
| v-for="(item, index) in list" | |
| :key="index" shape="round" | |
| variant="outline" | |
| size="medium" | |
| class="cursor-pointer hover:opacity-80" | |
| @click="onQuickSearch(item)" | |
| > | |
| {{ item }} <RiSearch2Line class="ml-1" size="12"/> | |
| </t-tag> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <PageFooter /> | |
| </div> | |
| </div> | |
| </div> | |
| </template> | |
| <script setup lang="tsx"> | |
| import router from '../router'; | |
| import { RiSearch2Line } from '@remixicon/vue'; | |
| import { PageFooter, SearchInputBar, SearCategory, SearchMode } from '../components'; | |
| import logoUrl from '../assets/logo.png'; | |
| import { useI18n } from 'vue-i18n'; | |
| import { computed } from 'vue'; | |
| import { useAppStore } from '../store'; | |
| const { locale } = useI18n(); | |
| const appStore = useAppStore(); | |
| const enableAdvanced = computed(() => appStore.engine === 'SEARXNG'); | |
| const quickly: Record<string, string[]> = { | |
| zh: [ | |
| '刘亦菲《玫瑰的故事》', | |
| '怎么使用Ollama在本地部署大模型?', | |
| 'llama3-70b需要什么硬件配置?', | |
| '小米su7体验怎么样?', | |
| '《庆余年2》大结局' | |
| ], | |
| en: [ | |
| 'What is LLM?', | |
| 'What is RAG?', | |
| 'How to use LLM in enterprise?' | |
| ] | |
| }; | |
| const list = computed(() => { | |
| const key = locale.value; | |
| return quickly[key]; | |
| }); | |
| const search = (val: string) => { | |
| if (!val) { | |
| return; | |
| } | |
| router.push({ | |
| name: 'SearchPage', | |
| query: { | |
| q: val | |
| } | |
| }); | |
| }; | |
| const onQuickSearch = (val: string) => { | |
| search(val); | |
| }; | |
| </script> | |
| <script lang="tsx"> | |
| export default { | |
| name: 'HomePage' | |
| }; | |
| </script> | |