Files
simrsx-fe/app/components/pub/my-ui/confirmation/confirmation.vue
T
hasyim_kai c98018bb4e Squashed commit of the following:
commit bcfb4c1456
Merge: 1cbde57 975c87d
Author: 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

commit 975c87d99a
Merge: f582090 1cbde57
Author: hasyim_kai <[email protected]>
Date:   Mon Nov 17 10:58:10 2025 +0700

    Merge branch 'dev' into feat/surat-kontrol-135

commit f582090d18
Author: hasyim_kai <[email protected]>
Date:   Thu Nov 13 11:56:21 2025 +0700

    Fix: Refactor surat kontrol

commit a14c4a5d3c
Author: hasyim_kai <[email protected]>
Date:   Tue Nov 11 14:21:58 2025 +0700

    Fix: Refactor Surat Kontrol CRUD {id} to {code}

commit 24313adef6
Author: hasyim_kai <[email protected]>
Date:   Fri Nov 7 10:35:46 2025 +0700

    Fix: debug back btn in add, edit, detail content page

commit 59b44b5729
Merge: 99a61a0 db15ec9
Author: Muhammad Hasyim Chaidir Ali <[email protected]>
Date:   Fri Nov 7 09:11:10 2025 +0700

    Merge branch 'dev' into feat/surat-kontrol-135

commit 99a61a0bf2
Author: hasyim_kai <[email protected]>
Date:   Thu Nov 6 08:06:01 2025 +0700

    Feat: add right & bottom label in input base component

commit db48919325
Author: hasyim_kai <[email protected]>
Date:   Wed Nov 5 13:53:43 2025 +0700

    Feat: add banner in List if requirement not met

commit bd57250f7e
Author: hasyim_kai <[email protected]>
Date:   Wed Nov 5 13:26:48 2025 +0700

    Fix: refactor getDetail url param

commit a361922e32
Author: hasyim_kai <[email protected]>
Date:   Wed Nov 5 13:19:07 2025 +0700

    Feat: Add & integrate add, edit, detail page

commit 331f4a6b20
Author: hasyim_kai <[email protected]>
Date:   Tue Nov 4 16:56:08 2025 +0700

    Feat: Integrate Control Letter

commit 2275f4dc99
Author: hasyim_kai <[email protected]>
Date:   Mon Oct 27 14:01:58 2025 +0700

    Feat: add UI BPJS > Surat Kontrol

commit 89e0e7a2c8
Author: hasyim_kai <[email protected]>
Date:   Mon Oct 27 10:21:59 2025 +0700

    Feat: add UI CRUD Surat Kontrol at Rehab Medik > kunjungan > Proses
2025-11-18 12:58:58 +07:00

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>