mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-05-10 17:42:50 +08:00
87 lines
2.0 KiB
Vue
87 lines
2.0 KiB
Vue
<script setup lang="ts">
|
|
import { computed } from 'vue'
|
|
|
|
interface Props {
|
|
modelValue: boolean
|
|
type?: 'info' | 'warn' | 'error'
|
|
title?: string
|
|
content?: string
|
|
confirmText?: string
|
|
cancelText?: string
|
|
width?: string | number
|
|
}
|
|
|
|
const props = withDefaults(defineProps<Props>(), {
|
|
type: 'info',
|
|
title: '',
|
|
content: '',
|
|
confirmText: '',
|
|
cancelText: '',
|
|
width: '28rem',
|
|
})
|
|
|
|
const emit = defineEmits<{
|
|
(e: 'update:modelValue', value: boolean): void
|
|
(e: 'confirm'): void
|
|
(e: 'cancel'): void
|
|
}>()
|
|
|
|
// 对话框类型对应的图标和颜色
|
|
const typeConfig = {
|
|
info: {
|
|
icon: 'mdi-information',
|
|
color: 'info',
|
|
},
|
|
warn: {
|
|
icon: 'mdi-alert',
|
|
color: 'warning',
|
|
},
|
|
error: {
|
|
icon: 'mdi-alert-circle',
|
|
color: 'error',
|
|
},
|
|
}
|
|
|
|
// 获取当前类型的配置
|
|
const currentType = computed(() => typeConfig[props.type])
|
|
|
|
// 确认按钮点击
|
|
function handleConfirm() {
|
|
emit('confirm')
|
|
emit('update:modelValue', false)
|
|
}
|
|
|
|
// 取消按钮点击
|
|
function handleCancel() {
|
|
emit('cancel')
|
|
emit('update:modelValue', false)
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<VDialog :model-value="modelValue" @update:model-value="emit('update:modelValue', $event)" :max-width="width">
|
|
<VCard>
|
|
<VCardItem>
|
|
<div class="d-flex align-center justify-start mt-3">
|
|
<VAvatar :color="currentType.color" variant="text" size="x-large">
|
|
<VIcon size="x-large" :icon="currentType.icon" />
|
|
</VAvatar>
|
|
<div class="mx-3">
|
|
<p class="font-weight-bold text-xl text-high-emphasis">{{ title }}</p>
|
|
<p>{{ content }}</p>
|
|
</div>
|
|
</div>
|
|
</VCardItem>
|
|
<VCardActions class="mx-auto">
|
|
<VBtn variant="tonal" color="secondary" class="px-5" @click="handleCancel">
|
|
{{ cancelText }}
|
|
</VBtn>
|
|
<VBtn variant="elevated" :color="currentType.color" @click="handleConfirm" class="px-5">
|
|
{{ confirmText }}
|
|
</VBtn>
|
|
</VCardActions>
|
|
<VDialogCloseBtn @click="handleCancel" />
|
|
</VCard>
|
|
</VDialog>
|
|
</template>
|