<script setup lang="ts"> import { onMounted, ref } from 'vue' import { withBase, useData } from 'vitepress' import { useLangs } from './useLangs' const { site, theme, lang } = useData() const { localeLinks } = useLangs({ removeCurrent: false }) const root = ref('/') onMounted(() => { const path = window ? window.location.pathname : "" .replace(site.value.base, '') .replace(/(^.*?\/).*$/, '/$1') if (localeLinks.value.length) { root.value = localeLinks.value.find(({ link }) => link.startsWith(path))?.link || localeLinks.value[0].link } }) </script> <template> <div class="NotFound"> <p class="code">{{ theme.notFound?.code ?? '404' }}</p> <h1 class="title">{{ theme.notFound?.title ?? '页面未找到' }}</h1> <div class="divider" /> <blockquote class="quote"> {{ theme.notFound?.quote ?? "生大材,不遇其时,其势定衰。生平庸,不化其势,其性定弱。" }} </blockquote> <div class="action"> <a class="link" href="javascript:history.go(-1)" :aria-label="'前往上一页'" > {{ '前往上一页' }} </a> <a class="link" :href="withBase(root)" :aria-label="theme.notFound?.linkLabel ?? '回到最初'" > {{ theme.notFound?.linkText ?? '回到最初' }} </a> </div> </div> </template> <style scoped> .NotFound { padding: 64px 24px 96px; text-align: center; } @media (min-width: 768px) { .NotFound { padding: 96px 32px 168px; } } .code { line-height: 64px; font-size: 64px; font-weight: 600; } .title { padding-top: 12px; letter-spacing: 2px; line-height: 20px; font-size: 20px; font-weight: 700; } .divider { margin: 24px auto 18px; width: 64px; height: 1px; background-color: var(--vp-c-divider); } .quote { margin: 0 auto; max-width: 256px; font-size: 14px; font-weight: 500; color: var(--vp-c-text-2); } .action { padding-top: 20px; display: flex; justify-content: center; gap: 12px; } .link { display: inline-block; border: 1px solid var(--vp-c-brand-1); border-radius: 16px; padding: 3px 16px; font-size: 14px; font-weight: 500; color: var(--vp-c-brand-1); transition: border-color 0.25s, color 0.25s; } .link:hover { border-color: var(--vp-c-brand-2); color: var(--vp-c-brand-2); } </style>