Spaces:
Runtime error
Runtime error
<script setup lang='ts'> | |
import { computed, ref } from 'vue' | |
import { NButton, NInput, NModal, useMessage } from 'naive-ui' | |
import { fetchVerify } from '@/api' | |
import { useAuthStore } from '@/store' | |
import Icon403 from '@/icons/403.vue' | |
interface Props { | |
visible: boolean | |
} | |
defineProps<Props>() | |
const authStore = useAuthStore() | |
const ms = useMessage() | |
const loading = ref(false) | |
const token = ref('') | |
const disabled = computed(() => !token.value.trim() || loading.value) | |
async function handleVerify() { | |
const secretKey = token.value.trim() | |
if (!secretKey) | |
return | |
try { | |
loading.value = true | |
await fetchVerify(secretKey) | |
authStore.setToken(secretKey) | |
ms.success('success') | |
window.location.reload() | |
} | |
catch (error: any) { | |
ms.error(error.message ?? 'error') | |
authStore.removeToken() | |
token.value = '' | |
} | |
finally { | |
loading.value = false | |
} | |
} | |
function handlePress(event: KeyboardEvent) { | |
if (event.key === 'Enter' && !event.shiftKey) { | |
event.preventDefault() | |
handleVerify() | |
} | |
} | |
</script> | |
<template> | |
<NModal :show="visible" style="width: 90%; max-width: 640px"> | |
<div class="p-10 bg-white rounded dark:bg-slate-800"> | |
<div class="space-y-4"> | |
<header class="space-y-2"> | |
<h2 class="text-2xl font-bold text-center text-slate-800 dark:text-neutral-200"> | |
403 | |
</h2> | |
<p class="text-base text-center text-slate-500 dark:text-slate-500"> | |
{{ $t('common.unauthorizedTips') }} | |
</p> | |
<Icon403 class="w-[200px] m-auto" /> | |
</header> | |
<NInput v-model:value="token" type="password" placeholder="" @keypress="handlePress" /> | |
<NButton | |
block | |
type="primary" | |
:disabled="disabled" | |
:loading="loading" | |
@click="handleVerify" | |
> | |
{{ $t('common.verify') }} | |
</NButton> | |
</div> | |
</div> | |
</NModal> | |
</template> | |