Files
boursecu_admin/src/components/BasicModal.vue
T

77 lines
1.6 KiB
Vue
Raw Normal View History

2026-01-24 17:45:54 +03:30
<template>
<div>
<a-modal
v-model:visible="localValue"
:title="props.title"
2026-06-03 17:51:27 +03:30
:z-index="props.zIndex"
2026-01-24 17:45:54 +03:30
centered
@ok="emits('ok')"
@cancel="emits('close')"
@close="emits('close')"
:confirm-loading="props.confirmLoading"
:width="props.width"
:ok-text="props.okText"
:cancel-text="props.cancelText"
:wrapClassName="props.wrapClassName"
>
<template v-if="props.customFooter" #footer>
<slot name="footer" />
</template>
<a-spin :spinning="props.loading">
<div class="overflow-y-auto py-2 px-1 relative max-h-[80vh]" id="body">
<slot />
</div>
</a-spin>
</a-modal>
</div>
</template>
<script setup lang="ts">
2026-06-03 17:51:27 +03:30
import { MODAL_ABOVE_ACTION_SHEET_Z_INDEX } from '@/constants/overlayZIndex'
2026-01-24 17:45:54 +03:30
//define emit
const emits = defineEmits(['ok', 'close', 'update:visible'])
//define props
interface Prop {
visible: boolean
title?: string
okText?: string
width?: string
cancelText?: string
customFooter?: boolean
confirmLoading?: boolean
loading?: boolean
wrapClassName?: string
2026-06-03 17:51:27 +03:30
zIndex?: number
2026-01-24 17:45:54 +03:30
}
const props = withDefaults(defineProps<Prop>(), {
visible: false,
cancelText: 'انصراف',
okText: 'ثبت',
customFooter: false,
confirmLoading: false,
loading: false,
2026-06-03 17:51:27 +03:30
wrapClassName: '',
zIndex: MODAL_ABOVE_ACTION_SHEET_Z_INDEX
2026-01-24 17:45:54 +03:30
})
const localValue = computed({
get() {
return props.visible
},
set(value) {
emits('update:visible', value)
}
})
</script>
<style>
.ant-modal-content {
border-radius: 0.6rem;
padding-top: 0.5rem;
}
</style>