commitbcfb4c1456Merge:1cbde57975c87dAuthor: Munawwirul Jamal <[email protected]> Date: Mon Nov 17 11:15:14 2025 +0700 Merge pull request #147 from dikstub-rssa/feat/surat-kontrol-135 Feat: Integration Rehab Medik - Surat Kontrol commit975c87d99aMerge:f5820901cbde57Author: hasyim_kai <[email protected]> Date: Mon Nov 17 10:58:10 2025 +0700 Merge branch 'dev' into feat/surat-kontrol-135 commitf582090d18Author: hasyim_kai <[email protected]> Date: Thu Nov 13 11:56:21 2025 +0700 Fix: Refactor surat kontrol commita14c4a5d3cAuthor: hasyim_kai <[email protected]> Date: Tue Nov 11 14:21:58 2025 +0700 Fix: Refactor Surat Kontrol CRUD {id} to {code} commit24313adef6Author: hasyim_kai <[email protected]> Date: Fri Nov 7 10:35:46 2025 +0700 Fix: debug back btn in add, edit, detail content page commit59b44b5729Merge:99a61a0db15ec9Author: Muhammad Hasyim Chaidir Ali <[email protected]> Date: Fri Nov 7 09:11:10 2025 +0700 Merge branch 'dev' into feat/surat-kontrol-135 commit99a61a0bf2Author: hasyim_kai <[email protected]> Date: Thu Nov 6 08:06:01 2025 +0700 Feat: add right & bottom label in input base component commitdb48919325Author: hasyim_kai <[email protected]> Date: Wed Nov 5 13:53:43 2025 +0700 Feat: add banner in List if requirement not met commitbd57250f7eAuthor: hasyim_kai <[email protected]> Date: Wed Nov 5 13:26:48 2025 +0700 Fix: refactor getDetail url param commita361922e32Author: hasyim_kai <[email protected]> Date: Wed Nov 5 13:19:07 2025 +0700 Feat: Add & integrate add, edit, detail page commit331f4a6b20Author: hasyim_kai <[email protected]> Date: Tue Nov 4 16:56:08 2025 +0700 Feat: Integrate Control Letter commit2275f4dc99Author: hasyim_kai <[email protected]> Date: Mon Oct 27 14:01:58 2025 +0700 Feat: add UI BPJS > Surat Kontrol commit89e0e7a2c8Author: hasyim_kai <[email protected]> Date: Mon Oct 27 10:21:59 2025 +0700 Feat: add UI CRUD Surat Kontrol at Rehab Medik > kunjungan > Proses
100 lines
2.4 KiB
Vue
100 lines
2.4 KiB
Vue
<script setup lang="ts">
|
|
import Dialog from '~/components/pub/my-ui/modal/dialog.vue'
|
|
import { Button } from '~/components/pub/ui/button'
|
|
|
|
interface ConfirmationProps {
|
|
open?: boolean
|
|
title?: string
|
|
message?: string
|
|
confirmText?: string
|
|
cancelText?: string
|
|
variant?: 'default' | 'destructive' | 'warning'
|
|
size?: 'sm' | 'md' | 'lg' | 'xl'
|
|
}
|
|
|
|
interface ConfirmationEmits {
|
|
'update:open': [value: boolean]
|
|
'confirm': []
|
|
'cancel': []
|
|
}
|
|
|
|
const props = withDefaults(defineProps<ConfirmationProps>(), {
|
|
open: false,
|
|
title: 'Konfirmasi',
|
|
message: 'Apakah Anda yakin ingin melanjutkan?',
|
|
confirmText: 'Ya',
|
|
cancelText: 'Batal',
|
|
variant: 'default',
|
|
size: 'md',
|
|
})
|
|
|
|
const emit = defineEmits<ConfirmationEmits>()
|
|
|
|
const isOpen = computed({
|
|
get: () => props.open,
|
|
set: (value) => emit('update:open', value),
|
|
})
|
|
|
|
const variantClasses = computed(() => {
|
|
const variants = {
|
|
default: {
|
|
icon: 'i-lucide-help-circle',
|
|
iconColor: 'text-blue-500',
|
|
confirmVariant: 'default' as const,
|
|
},
|
|
destructive: {
|
|
icon: 'i-lucide-alert-triangle',
|
|
iconColor: 'text-red-500',
|
|
confirmVariant: 'destructive' as const,
|
|
},
|
|
warning: {
|
|
icon: 'i-lucide-alert-circle',
|
|
iconColor: 'text-yellow-500',
|
|
confirmVariant: 'default' as const,
|
|
},
|
|
}
|
|
return variants[props.variant]
|
|
})
|
|
|
|
function handleConfirm() {
|
|
emit('confirm')
|
|
emit('update:open', false)
|
|
}
|
|
|
|
function handleCancel() {
|
|
emit('cancel')
|
|
emit('update:open', false)
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<Dialog v-model:open="isOpen" :title="title" :size="size">
|
|
<div class="space-y-4">
|
|
<!-- Icon dan pesan -->
|
|
<div class="flex items-center gap-3">
|
|
<div :class="[variantClasses.icon, variantClasses.iconColor]" class="w-6 h-6 mt-1 flex-shrink-0" />
|
|
<div class="flex-1">
|
|
<p class="text-sm text-muted-foreground leading-relaxed">
|
|
{{ message }}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Slot untuk konten custom -->
|
|
<div v-if="$slots.default">
|
|
<slot />
|
|
</div>
|
|
|
|
<!-- Footer buttons -->
|
|
<div class="flex justify-end gap-3 pt-4">
|
|
<Button variant="outline" @click="handleCancel">
|
|
{{ cancelText }}
|
|
</Button>
|
|
<Button :variant="variantClasses.confirmVariant" @click="handleConfirm">
|
|
{{ confirmText }}
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</Dialog>
|
|
</template>
|