Files
satori/app.vue
2025-02-25 22:49:45 +08:00

154 lines
3.1 KiB
Vue

<template lang="pug">
.min-h-screen.bg-white.text-gray-800.w-full
header.header.absolute.left-0.top-0.right-0.border-gray-100.transition-all.duration-150.w-full.overflow-hidden(
:class="{ 'border-b-1': route.path !== '/' && route.path !== '/account/signin' }"
)
nav.container.mx-auto.flex.text-gray-400.text-lg.font-bold
template(v-for="item in navbar")
NuxtLink.px-4.py-6.transition-all.duration-150(
class="text-gray-500 hover:text-dark-800",
:class="{ 'text-dark-800': item.active }",
:to="item.path"
) {{ item.title }}
NuxtLink.px-4.py-6.ml-auto.text-gray-500(to="/account" v-if="!account.padding") {{ account.online ? account.name : '登录' }}
NuxtPage
</template>
<script setup>
// 全局引入代码高亮插件的样式
import "highlight.js/styles/atom-one-dark.css"
const route = useRoute()
const account = useState("account", () => ({
id: 0,
sid: '',
name: '',
avatars: [],
online: false,
padding: true,
}))
const navbar = computed(() => {
return [
{
title: "Home",
path: "/",
active: route.path === "/",
},
{
title: "Blog",
path: "/blog",
active: route.path.includes("/blog")
},
{
title: "Gallery",
path: "/gallery",
active: route.path.includes("/gallery")
},
{
title: "Numerology",
path: "/numerology",
active: route.path.includes("/numerology")
},
{
title: "Status",
path: "/status",
active: route.path.includes("/status")
}
]
});
onMounted(() => {
$fetch("/api/user/self").then((data) => {
account.value.sid = data.sid
account.value.id = data.id
account.value.name = data.name
account.value.online = data.online
account.value.padding = false
})
})
</script>
<style>
/** 去除链接默认下划线 */
a {
text-decoration: none;
}
/** 全局字体 */
body {
font-family: 'Noto Sans SC', 'Microsoft YaHei', sans-serif;
}
/** 全局滚动条取消空间占用, 防止渲染时闪烁 */
::-webkit-scrollbar {
display: none;
}
/** markdown */
.markdown h1 {
font-weight: bold;
font-size: 2rem;
margin: 1.5rem 0;
word-wrap: break-word;
word-break: break-all;
}
.markdown pre {
max-width: 100%;
overflow: auto;
overflow-y: hidden
}
.markdown pre code {
padding: 1rem;
border-radius: 0.5rem;
font-size: 14px;
}
.markdown table {
border-collapse: collapse;
border-spacing: 0;
margin: 1rem 0;
}
.markdown table tr th {
padding: 0.5rem;
}
.markdown table tr td {
padding: 0.5rem;
}
.markdown p {
margin: 2rem 0;
word-wrap: break-word;
word-break: break-all;
white-space: wrap;
}
.markdown input[type="checkbox"] {
position: relative;
margin-right: 0.3em;
}
.markdown input[type="checkbox"]::before {
position: absolute;
content: "\a0";
display: inline-block;
width: 1em;
height: 1em;
border-radius: 0.3em;
background-color: #ececec;
text-indent: 0.15em;
line-height: 0.65;
}
.markdown input[type="checkbox"]:checked::before {
content: "\2713";
color: #00aeec;
background-color: #dff6fd;
}
</style>