Files
banu-front/src/components/ConfirmModal.vue
T
sajjadtalkhabi b8ced45375 Fix
2026-05-13 03:06:59 +03:30

92 lines
2.1 KiB
Vue

<template>
<BasicModal min-width="0" max-width="640px" width="95%" :show-close-button="false">
<template #default="{ data }">
<div class="confirm-modal">
<h3 class="confirm-modal__title">{{ data?.title || 'تأیید حذف' }}</h3>
<div class="confirm-modal__message">
<span v-if="data?.message" v-html="data.message" />
<span v-else>این عمل غیرقابل بازگشت است. آیا از حذف اطمینان دارید؟</span>
</div>
<div class="confirm-modal__actions">
<BaseButton
variant="transparent"
text="منصرف شدم"
text-class=""
custom-class="confirm-modal__btn confirm-modal__btn--cancel"
@click="cancel(data)"
/>
<BaseButton
variant="primary"
text="تایید"
:loading="!!data?.confirmLoading"
custom-class="confirm-modal__btn confirm-modal__btn--confirm"
@click="confirm(data)"
/>
</div>
</div>
</template>
</BasicModal>
</template>
<script setup>
import { useModalStore } from '@/store/modal'
import BasicModal from '@/components/BasicModal.vue'
import BaseButton from '@/components/BaseButton.vue'
defineOptions({ name: 'ConfirmModal' })
const { closeModal } = useModalStore()
const confirm = (data) => {
data?.onConfirm?.()
if (!data?.keepOpenOnConfirm) closeModal('ConfirmModal')
}
const cancel = (data) => {
data?.onCancel?.()
closeModal('ConfirmModal')
}
</script>
<style lang="scss" scoped>
.confirm-modal {
padding: 1.5rem;
&__title {
font-family: var(--font-family-fa);
font-weight: 700;
font-size: 1.25rem;
color: #1f2937;
text-align: center;
margin-bottom: 0.5rem;
}
&__message {
margin-bottom: 1.5rem;
font-family: var(--font-family-fa);
text-align: center;
:deep(p) {
margin: 0;
}
}
&__actions {
display: flex;
gap: 0.75rem;
justify-content: flex-end;
}
&__btn {
min-width: 100px;
padding: 0.5rem 1.5rem;
&--confirm {
padding-inline: 1.5rem 2.5rem;
}
}
}
</style>