c98018bb4e
commitbcfb4c1456Merge:1cbde57975c87dAuthor: Munawwirul Jamal <57973347+munaja@users.noreply.github.com> 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 <muhammad.hasyim.c.a@gmail.com> Date: Mon Nov 17 10:58:10 2025 +0700 Merge branch 'dev' into feat/surat-kontrol-135 commitf582090d18Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Thu Nov 13 11:56:21 2025 +0700 Fix: Refactor surat kontrol commita14c4a5d3cAuthor: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Tue Nov 11 14:21:58 2025 +0700 Fix: Refactor Surat Kontrol CRUD {id} to {code} commit24313adef6Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> 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 <68959522+Hasyim-Kai@users.noreply.github.com> Date: Fri Nov 7 09:11:10 2025 +0700 Merge branch 'dev' into feat/surat-kontrol-135 commit99a61a0bf2Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Thu Nov 6 08:06:01 2025 +0700 Feat: add right & bottom label in input base component commitdb48919325Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Wed Nov 5 13:53:43 2025 +0700 Feat: add banner in List if requirement not met commitbd57250f7eAuthor: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Wed Nov 5 13:26:48 2025 +0700 Fix: refactor getDetail url param commita361922e32Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Wed Nov 5 13:19:07 2025 +0700 Feat: Add & integrate add, edit, detail page commit331f4a6b20Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Tue Nov 4 16:56:08 2025 +0700 Feat: Integrate Control Letter commit2275f4dc99Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Mon Oct 27 14:01:58 2025 +0700 Feat: add UI BPJS > Surat Kontrol commit89e0e7a2c8Author: hasyim_kai <muhammad.hasyim.c.a@gmail.com> Date: Mon Oct 27 10:21:59 2025 +0700 Feat: add UI CRUD Surat Kontrol at Rehab Medik > kunjungan > Proses
Confirmation Modal Components
Sistem confirmation modal yang modular dan dapat digunakan kembali di seluruh aplikasi.
Components
1. confirmation.vue - Base Confirmation Modal
Komponen dasar untuk modal konfirmasi yang dapat dikustomisasi.
Props:
open?: boolean- Status modal (terbuka/tertutup)title?: string- Judul modal (default: "Konfirmasi")message?: string- Pesan konfirmasi (default: "Apakah Anda yakin ingin melanjutkan?")confirmText?: string- Text tombol konfirmasi (default: "Ya")cancelText?: string- Text tombol batal (default: "Batal")variant?: 'default' | 'destructive' | 'warning'- Varian tampilan (default: "default")size?: 'sm' | 'md' | 'lg' | 'xl'- Ukuran modal (default: "md")
Events:
@confirm- Dipanggil saat tombol konfirmasi diklik@cancel- Dipanggil saat tombol batal diklik@update:open- Dipanggil saat status modal berubah
Contoh penggunaan:
<template>
<Confirmation
v-model:open="isConfirmOpen"
title="Hapus Data"
message="Apakah Anda yakin ingin menghapus data ini?"
confirm-text="Hapus"
variant="destructive"
@confirm="handleConfirm"
@cancel="handleCancel"
/>
</template>
2. record-confirmation.vue - Record-specific Confirmation
Komponen khusus untuk konfirmasi operasi pada record/data tertentu.
Props:
open?: boolean- Status modalaction?: 'delete' | 'deactivate' | 'activate' | 'archive' | 'restore'- Jenis aksi (default: "delete")record?: RecordData | null- Data record yang akan diprosescustomTitle?: string- Custom judul (opsional)customMessage?: string- Custom pesan (opsional)customConfirmText?: string- Custom text tombol konfirmasi (opsional)customCancelText?: string- Custom text tombol batal (opsional)
Events:
@confirm- Dipanggil dengan parameter(record, action)@cancel- Dipanggil saat batal@update:open- Update status modal
Contoh penggunaan:
<template>
<RecordConfirmation
v-model:open="isRecordConfirmOpen"
action="delete"
:record="selectedRecord"
@confirm="handleDeleteRecord"
@cancel="handleCancel"
>
<template #default="{ record }">
<div class="text-sm">
<p><strong>ID:</strong> {{ record?.id }}</p>
<p><strong>Nama:</strong> {{ record?.name }}</p>
</div>
</template>
</RecordConfirmation>
</template>
Action Types
Record confirmation mendukung beberapa jenis aksi dengan konfigurasi default:
- delete: Hapus data (variant: destructive, warna merah)
- deactivate: Nonaktifkan data (variant: warning, warna kuning)
- activate: Aktifkan data (variant: default, warna biru)
- archive: Arsipkan data (variant: warning, warna kuning)
- restore: Pulihkan data (variant: default, warna biru)
Integration Example
Contoh implementasi di komponen list:
<script setup>
// State management
const isRecordConfirmationOpen = ref(false)
const selectedRecord = ref(null)
const confirmAction = ref('delete')
// Handle action dari table
function handleRowAction(action, record) {
selectedRecord.value = record
confirmAction.value = action
isRecordConfirmationOpen.value = true
}
// Handle konfirmasi
async function handleConfirmAction(record, action) {
try {
// API call berdasarkan action
await performAction(action, record.id)
// Refresh data
await refreshData()
} catch (error) {
// Handle error
}
}
</script>
<template>
<!-- Your list component -->
<DataTable @action="handleRowAction" />
<!-- Confirmation modal -->
<RecordConfirmation
v-model:open="isRecordConfirmationOpen"
:action="confirmAction"
:record="selectedRecord"
@confirm="handleConfirmAction"
/>
</template>
Styling
Komponen menggunakan Tailwind CSS dan shadcn/ui components. Pastikan dependencies berikut tersedia:
~/components/pub/my-ui/modal/dialog.vue~/components/pub/ui/button