mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-06-19 06:30:35 +08:00
83 lines
2.4 KiB
Vue
83 lines
2.4 KiB
Vue
<script setup lang="ts">
|
|
import type { LlmProviderAuthSession } from '@/composables/useLlmProviderDirectory'
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
const { t } = useI18n()
|
|
|
|
const props = withDefaults(
|
|
defineProps<{
|
|
authSession?: LlmProviderAuthSession | null
|
|
modelValue?: boolean
|
|
polling?: boolean
|
|
popupBlocked?: boolean
|
|
}>(),
|
|
{
|
|
authSession: null,
|
|
modelValue: true,
|
|
polling: false,
|
|
popupBlocked: false,
|
|
},
|
|
)
|
|
|
|
const emit = defineEmits<{
|
|
(event: 'close'): void
|
|
(event: 'openAuthPage'): void
|
|
(event: 'poll'): void
|
|
(event: 'update:modelValue', value: boolean): void
|
|
}>()
|
|
|
|
const visible = computed({
|
|
get: () => props.modelValue,
|
|
set: value => {
|
|
emit('update:modelValue', value)
|
|
if (!value) emit('close')
|
|
},
|
|
})
|
|
|
|
// 关闭授权弹窗并通知调用方停止轮询。
|
|
function closeDialog() {
|
|
visible.value = false
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<VDialog v-if="visible" v-model="visible" max-width="560">
|
|
<VCard>
|
|
<VCardTitle>{{ t('setting.system.llmProviderAuthDialogTitle') }}</VCardTitle>
|
|
<VCardText class="d-flex flex-column ga-4">
|
|
<VAlert v-if="props.authSession?.instructions" type="info" variant="tonal">
|
|
{{ props.authSession.instructions }}
|
|
</VAlert>
|
|
|
|
<VAlert v-if="props.popupBlocked" type="warning" variant="tonal">
|
|
{{ t('setting.system.llmProviderPopupBlocked') }}
|
|
</VAlert>
|
|
|
|
<div v-if="props.authSession?.user_code">
|
|
<div class="text-caption text-medium-emphasis mb-1">{{ t('setting.system.llmProviderDeviceCode') }}</div>
|
|
<div class="text-h5 font-weight-bold">{{ props.authSession.user_code }}</div>
|
|
</div>
|
|
|
|
<div v-if="props.authSession?.message" class="text-body-2">
|
|
{{ props.authSession.message }}
|
|
</div>
|
|
|
|
<div class="d-flex flex-wrap ga-2">
|
|
<VBtn color="primary" prepend-icon="mdi-open-in-new" @click="emit('openAuthPage')">
|
|
{{ t('setting.system.llmProviderOpenAuthPage') }}
|
|
</VBtn>
|
|
<VBtn variant="tonal" prepend-icon="mdi-refresh" :loading="props.polling" @click="emit('poll')">
|
|
{{ t('setting.system.llmProviderCheckAuthStatus') }}
|
|
</VBtn>
|
|
</div>
|
|
</VCardText>
|
|
<VCardActions>
|
|
<VSpacer />
|
|
<VBtn variant="text" @click="closeDialog">
|
|
{{ t('common.close') }}
|
|
</VBtn>
|
|
</VCardActions>
|
|
</VCard>
|
|
</VDialog>
|
|
</template>
|