Files
gsfdc/portal/app/components/SiteLoading.vue
T

50 lines
888 B
Vue

<template>
<div class="boot" role="status" aria-live="polite" aria-busy="true">
<span class="spinner" aria-hidden="true" />
<p class="hint">{{ hint }}</p>
</div>
</template>
<script setup lang="ts">
withDefaults(defineProps<{ hint?: string }>(), {
hint: "正在加载",
})
</script>
<style scoped>
.boot {
min-height: 100vh;
display: grid;
place-content: center;
justify-items: center;
gap: 16px;
background: #fff;
}
.spinner {
width: 28px;
height: 28px;
border-radius: 50%;
border: 2px solid #e5e5e5;
border-top-color: var(--color-primary, #0b3a66);
animation: spin 0.8s linear infinite;
}
.hint {
margin: 0;
color: #666;
font-size: 14px;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
@media (prefers-reduced-motion: reduce) {
.spinner {
animation: none;
border-color: var(--color-primary, #0b3a66);
}
}
</style>