<script setup lang='ts'> import { computed, ref } from 'vue' import { NCard, NModal, NTabPane, NTabs } from 'naive-ui' import General from './General.vue' import About from './About.vue' import { SvgIcon } from '@/components/common' interface Props { visible: boolean } interface Emit { (e: 'update:visible', visible: boolean): void } const props = defineProps<Props>() const emit = defineEmits<Emit>() const active = ref('General') const reload = ref(false) const show = computed({ get() { return props.visible }, set(visible: boolean) { emit('update:visible', visible) }, }) function handleReload() { reload.value = true setTimeout(() => { reload.value = false }, 0) } </script> <template> <NModal v-model:show="show"> <NCard role="dialog" aria-modal="true" :bordered="false" style="width: 100%; max-width: 640px"> <NTabs v-model:value="active" type="line" animated> <NTabPane name="General" tab="General"> <template #tab> <SvgIcon class="text-lg" icon="ri:file-user-line" /> <span class="ml-2">General</span> </template> <div class="min-h-[100px]"> <General v-if="!reload" @update="handleReload" /> </div> </NTabPane> <NTabPane name="Config" tab="Config"> <template #tab> <SvgIcon class="text-lg" icon="ri:list-settings-line" /> <span class="ml-2">Config</span> </template> <About /> </NTabPane> </NTabs> </NCard> </NModal> </template>