54 lines
1.8 KiB
Vue
54 lines
1.8 KiB
Vue
<script setup>
|
|
/**
|
|
* 公共认证布局:登录、注册、找回及第三方绑定共享站点标识和主题入口。认证页链接保留处理后的 redirect,发布版 data-v 作用域用于继续匹配已有共享样式。
|
|
*/
|
|
import "~/assets/styles/blank.DOa3C9wi.css";
|
|
import { onMounted } from "vue";
|
|
import { useRoute } from "#app";
|
|
import { NuxtLink } from "#components";
|
|
import { t as useSiteConfig } from "~/lib/useSiteConfig.js";
|
|
import { t as useTheme } from "~/lib/useTheme.js";
|
|
import { t as authLink } from "~/lib/auth-redirect.js";
|
|
import { logoUrl } from "~/utils/brand.js";
|
|
|
|
const route = useRoute();
|
|
const siteConfig = useSiteConfig();
|
|
const theme = useTheme();
|
|
|
|
onMounted(() => siteConfig.load().catch(() => {}));
|
|
</script>
|
|
|
|
<template>
|
|
<!-- Keep the published CSS scope until its shared auth styles are migrated together. -->
|
|
<div class="blank-layout" data-v-69ca9392>
|
|
<header class="auth-topbar" data-v-69ca9392>
|
|
<NuxtLink to="/" class="auth-logo" data-v-69ca9392>
|
|
<img :src="logoUrl" alt="破碎工坊云" data-v-69ca9392 />
|
|
</NuxtLink>
|
|
<div class="auth-top-actions" data-v-69ca9392>
|
|
<button
|
|
class="auth-theme"
|
|
type="button"
|
|
:aria-label="theme.isDark.value ? '切换浅色模式' : '切换深色模式'"
|
|
data-v-69ca9392
|
|
@click="theme.cycle"
|
|
>
|
|
<i
|
|
:class="theme.isDark.value ? 'pi pi-moon' : 'pi pi-sun'"
|
|
data-v-69ca9392
|
|
/>
|
|
</button>
|
|
<NuxtLink
|
|
v-if="route.path !== '/login'"
|
|
:to="authLink('/login', route.query.redirect)"
|
|
class="auth-login"
|
|
data-v-69ca9392
|
|
>
|
|
<i class="pi pi-user" data-v-69ca9392 /> 登录
|
|
</NuxtLink>
|
|
</div>
|
|
</header>
|
|
<main class="auth-main" data-v-69ca9392><slot /></main>
|
|
</div>
|
|
</template>
|