diff --git a/components/pendaftaran/BiodataPasien.vue b/components/pendaftaran/BiodataPasien.vue index eb35c35..5bcb582 100644 --- a/components/pendaftaran/BiodataPasien.vue +++ b/components/pendaftaran/BiodataPasien.vue @@ -85,6 +85,54 @@ const handlePatientSelect = (patient: PatientData | null) => { } }; +// Fetch patient by RM number (for edit mode) +const fetchPatientByRm = async (rm: string) => { + if (!rm) return; + + loadingPatients.value = true; + + try { + const response = await api.get('/reference/pasien', { + params: { + limit: 1, + search: rm + } + }); + + if (response.data?.data && response.data.data.length > 0) { + const patient = response.data.data[0]; + if (patient.nomr === rm) { + selectedPatient.value = patient; + patientItems.value = [patient]; + } + } + } catch (error) { + console.error('Error fetching patient by RM:', error); + } finally { + loadingPatients.value = false; + } +}; + +// Watch for formData changes to load patient details in edit mode +watchEffect(async () => { + const rm = formData.value.noRekamMedis; + const nama = formData.value.namaPasien; + + // Use nextTick to ensure all reactive updates are complete + await nextTick(); + + // If both RM and Nama are populated but selectedPatient is not, fetch patient details + if (rm && nama && !selectedPatient.value) { + await fetchPatientByRm(rm); + } + + // Clear selectedPatient if RM is cleared + if (!rm && selectedPatient.value) { + selectedPatient.value = null; + patientItems.value = []; + } +}); + // Phone validation rules const phoneLength = (value: string) => { if (!value) return true; @@ -164,7 +212,6 @@ const deletePhoneNumber = (index: number) => { No Rekam Medis * { Jenis Kelamin - + @@ -271,7 +320,7 @@ const deletePhoneNumber = (index: number) => { - + Nomor Telepon @@ -285,6 +334,7 @@ const deletePhoneNumber = (index: number) => { type="tel" hide-details="auto" @input="handlePhoneInput" + @keyup.enter="addPhoneNumber" :error-messages="phoneError !== true && newPhoneNumber ? [phoneError as string] : []" class="flex-1-1" > diff --git a/components/pendaftaran/MedisPasien.vue b/components/pendaftaran/MedisPasien.vue index 1164e77..6a788fc 100644 --- a/components/pendaftaran/MedisPasien.vue +++ b/components/pendaftaran/MedisPasien.vue @@ -10,14 +10,14 @@ const props = withDefaults(defineProps(), { const diagnosisItems = defineModel('diagnosisItems', { required: true }); const tindakanItems = defineModel('tindakanItems', { required: true }); -// Modal state for diagnosis -const showDiagnosisModal = ref(false); +// Form state for diagnosis const diagnosisForm = ref({ kodeDiagnosa: '', diagnosa: '', jenisDiagnosa: 'utama' }); const editingDiagnosisIndex = ref(null); +const diagnosisFormExpanded = ref(true); // Always show form const diagnosisList = ref([]); const loadingDiagnosis = ref(false); const diagnosisSearchTimeout = ref(null); @@ -75,14 +75,14 @@ const diagnosisOptions = computed(() => { })); }); -// Modal state for tindakan -const showTindakanModal = ref(false); +// Form state for tindakan const tindakanForm = ref({ kodeTindakan: '', tindakan: '', tindakanTambahan: '' }); const editingTindakanIndex = ref(null); +const tindakanFormExpanded = ref(true); // Always show form const tindakanList = ref([]); const loadingTindakan = ref(false); const tindakanSearchTimeout = ref(null); @@ -148,20 +148,22 @@ if (!Array.isArray(tindakanItems.value)) { tindakanItems.value = []; } -const openDiagnosisModal = () => { +const resetDiagnosisForm = () => { diagnosisForm.value = { kodeDiagnosa: '', diagnosa: '', jenisDiagnosa: 'utama' }; editingDiagnosisIndex.value = null; - showDiagnosisModal.value = true; +}; + +const openDiagnosisModal = () => { + resetDiagnosisForm(); }; const editDiagnosis = (index: number) => { diagnosisForm.value = { ...diagnosisItems.value[index] }; editingDiagnosisIndex.value = index; - showDiagnosisModal.value = true; }; const saveDiagnosis = () => { @@ -173,13 +175,11 @@ const saveDiagnosis = () => { diagnosisItems.value.push({ ...diagnosisForm.value }); } - showDiagnosisModal.value = false; - diagnosisForm.value = { - kodeDiagnosa: '', - diagnosa: '', - jenisDiagnosa: 'utama' - }; - editingDiagnosisIndex.value = null; + resetDiagnosisForm(); +}; + +const cancelEditDiagnosis = () => { + resetDiagnosisForm(); }; const deleteDiagnosis = (index: number) => { @@ -191,24 +191,25 @@ const handleKodeDiagnosaChange = (kode: string) => { const found = diagnosisList.value.find(d => d.kodeicd === kode); if (found) { diagnosisForm.value.diagnosa = found.keterangan; - // Keep jenisDiagnosa as is or default to current value } }; -const openTindakanModal = () => { +const resetTindakanForm = () => { tindakanForm.value = { kodeTindakan: '', tindakan: '', tindakanTambahan: '' }; editingTindakanIndex.value = null; - showTindakanModal.value = true; +}; + +const openTindakanModal = () => { + resetTindakanForm(); }; const editTindakan = (index: number) => { tindakanForm.value = { ...tindakanItems.value[index] }; editingTindakanIndex.value = index; - showTindakanModal.value = true; }; const saveTindakan = () => { @@ -220,13 +221,11 @@ const saveTindakan = () => { tindakanItems.value.push({ ...tindakanForm.value }); } - showTindakanModal.value = false; - tindakanForm.value = { - kodeTindakan: '', - tindakan: '', - tindakanTambahan: '' - }; - editingTindakanIndex.value = null; + resetTindakanForm(); +}; + +const cancelEditTindakan = () => { + resetTindakanForm(); }; const deleteTindakan = (index: number) => { @@ -238,296 +237,363 @@ const handleKodeTindakanChange = (kode: string) => { const found = tindakanList.value.find(t => t.kode === kode); if (found) { tindakanForm.value.tindakan = found.keterangan; - // Keep tindakanTambahan as is or user can input manually } }; + Data Medis Pasien - Diagnosa - - - - No items - - - - + + + + + + + Jenis Diagnosa * + + + + + + + + + Kode Diagnosa * + + + + + + {{ diagnosisSearchPerformed && diagnosisList.length === 0 + ? 'Data tidak ditemukan' : 'Ketik untuk mencari...' }} + + + + + + + + + + Diagnosa * + + + + + + + + + mdi-close + Batal + + + + {{ editingDiagnosisIndex !== null ? 'mdi-check' : 'mdi-plus' }} + + {{ editingDiagnosisIndex !== null ? 'Update' : 'Tambah' }} + + + + + + + + - - - - {{ item.kodeDiagnosa }} - {{ item.diagnosa }} - - {{ item.jenisDiagnosa === 'utama' ? 'Diagnosa Utama' : 'Diagnosa Tambahan' }} - + + Tidak ada data diagnosa + + + + + + + + + + + {{ item.jenisDiagnosa === 'utama' ? 'mdi-stethoscope' : 'mdi-stethoscope' }} + + + + + + {{ item.kodeDiagnosa }} - {{ item.diagnosa }} + + + {{ item.jenisDiagnosa === 'utama' ? 'Diagnosa Utama' : 'Diagnosa Tambahan' }} + + + + + + mdi-pencil + + + mdi-delete + - - mdi-delete - - - - - + + + + - - Tambah Diagnosa - Tindakan - - - - No items - - - - - - - - {{ item.kodeTindakan }} - {{ item.tindakan }} - - {{ item.tindakanTambahan }} - - - - mdi-delete - - - - - + + + + + + + + Kode Tindakan * + + + + + + {{ tindakanSearchPerformed && tindakanList.length === 0 + ? 'Data tidak ditemukan' : 'Ketik untuk mencari...' }} + + + + + + + + + + Tindakan * + + + + + + + + Tindakan Tambahan + + + + + + + + + mdi-close + Batal + + + + {{ editingTindakanIndex !== null ? 'mdi-check' : 'mdi-plus' }} + + {{ editingTindakanIndex !== null ? 'Update' : 'Tambah' }} + + + + - - Tambah Tindakan - + + + + + Tidak ada data tindakan + + + + + + + + + mdi-medical-bag + + + + + {{ item.kodeTindakan }} - {{ item.tindakan }} + + + {{ item.tindakanTambahan }} + + + + + + mdi-pencil + + + mdi-delete + + + + + + + - - - - - - - mdi-package-variant - {{ editingDiagnosisIndex !== null ? 'Edit' : 'Tambah' }} Item Data Diagnosa Pasien Operasi - - - mdi-close - - - - - - - - - - Kode Diagnosa - - - - - {{ diagnosisSearchPerformed && diagnosisList.length === 0 - ? 'Data tidak ditemukan' : 'Cari Diagnosa' }} - - - - - - - - - Diagnosa - - - - - - Jenis Diagnosa - - - - - - - - - - - - - mdi-check - Simpan - - - - - - - - - - - mdi-package-variant - {{ editingTindakanIndex !== null ? 'Edit' : 'Tambah' }} Item Data Tindakan Pasien Operasi - - - mdi-close - - - - - - - - - - Kode Tindakan - - - - - {{ tindakanSearchPerformed && tindakanList.length === 0 - ? 'Data tidak ditemukan' : 'Cari Tindakan' }} - - - - - - - - - Tindakan - - - - - - Tindakan Tambahan - - - - - - - - - - mdi-check - Simpan - - - - diff --git a/components/pendaftaran/ModalDetailPendaftaran.vue b/components/pendaftaran/ModalDetailPendaftaran.vue new file mode 100644 index 0000000..8789cbb --- /dev/null +++ b/components/pendaftaran/ModalDetailPendaftaran.vue @@ -0,0 +1,676 @@ + + + + + + + + + Detail Pendaftaran Antrean Operasi + + + mdi-close + + + + + + + + + + + Status: {{ getStatusText(statusPasienData.statusOperasi) }} + + + + + + + + + + Informasi Pasien + + + + + + + + + No Rekam Medis + + + {{ formData.noRekamMedis || '-' }} + + + + + + + + No KTP + + + {{ formData.noKtp || '-' }} + + + + + + + + Nama Pasien + + + {{ formData.namaPasien || '-' }} + + + + + + + + Jenis Kelamin + + + + + {{ getGenderText(formData.jenisKelamin) }} + + + + + + + + + Tanggal Lahir + + + {{ formatDate(formData.tanggalLahir) }} + + + + + + + + Umur + + + {{ formData.umur || '-' }} + + + + + + + + Alamat + + + {{ formData.alamat || '-' }} + + + + + + + + Nomor Telepon + + + + + {{ phone }} + + - + + + + + + + + + + + + + Diagnosis + + + + + + + + + + {{ index + 1 }} + + + + {{ item.jenisDiagnosa }} + + + {{ item.diagnosa }} + + + {{ item.kodeDiagnosa }} + + + + + + + + + Tidak ada data diagnosis + + + + + + + + + + Tindakan Operasi + + + + + + + + + + {{ index + 1 }} + + + + {{ item.tindakan }} + + + {{ item.tindakanTambahan || '-' }} + + + {{ item.kodeTindakan || '-' }} + + + + + + + + + Tidak ada data tindakan + + + + + + + + + + Rencana Operasi + + + + + + + + + Spesialis + + + {{ rencanaOperasiData.SpesialisName || '-' }} + + + + + + + + Sub Spesialis + + + {{ rencanaOperasiData.SubSpesialisName || '-' }} + + + + + + + + Tanggal Daftar + + + {{ formatDateTime(rencanaOperasiData.tanggalDaftar) }} + + + + + + + + Kategori Operasi + + + + {{ rencanaOperasiData.kategoriName || '-' }} + + + + + + + + + Keterangan + + + {{ rencanaOperasiData.keterangan }} + + + + + + + + + + + + + Tim Dokter Pelaksana + + + + + + + + + + + + {{ dokter.nama }} + + + + + NIP: {{ dokter.nip }} + + + {{ dokter.satuan_kerja }} + + + + + + + Tidak ada data dokter pelaksana + + + + + + + + + + Status Operasi + + + + + + + + + Status + + + + + {{ getStatusText(statusPasienData.statusOperasi) }} + + + + + + + + + Tanggal Selesai + + + {{ formatDateTime(statusPasienData.tanggalSelesai) }} + + + + + + + + Keterangan Status + + + {{ statusPasienData.keteranganStatus }} + + + + + + + + + + + + Tutup + + + + + + + diff --git a/components/pendaftaran/ModalPendaftaran.vue b/components/pendaftaran/ModalPendaftaran.vue index 78d4fbd..926f32a 100644 --- a/components/pendaftaran/ModalPendaftaran.vue +++ b/components/pendaftaran/ModalPendaftaran.vue @@ -3,7 +3,9 @@ import BiodataPasien from '@/components/pendaftaran/BiodataPasien.vue'; import MedisPasien from '@/components/pendaftaran/MedisPasien.vue'; import RencanaOperasi from '@/components/pendaftaran/RencanaOperasi.vue'; import StatusPasienOperasi from '@/components/pendaftaran/StatusPasienOperasi.vue'; +import LoadingState from '@/components/shared/LoadingState.vue'; import { usePendaftaranStore } from '@/store/pendaftaran'; +import { getAntrianOperasiById } from '@/services/antrean'; import { storeToRefs } from 'pinia'; import type { PageMode } from '~/types/common'; @@ -11,11 +13,17 @@ interface Props { modelValue: boolean; mode?: PageMode; id?: string | number; + initialKategori?: number; + initialSpesialis?: number; + initialSubSpesialis?: number; } const props = withDefaults(defineProps(), { mode: 'create', - id: undefined + id: undefined, + initialKategori: undefined, + initialSpesialis: undefined, + initialSubSpesialis: undefined }); const emit = defineEmits<{ @@ -38,6 +46,8 @@ const { const form = ref(); const valid = ref(true); +const loadingDetail = ref(false); +const errorDetail = ref(false); // Computed properties const isReadonly = computed(() => props.mode === 'view'); @@ -59,13 +69,93 @@ const showModal = computed({ }); // Initialize form when modal opens -watch(() => props.modelValue, (isOpen) => { +watch(() => props.modelValue, async (isOpen) => { if (isOpen) { - initializeForm(); + await initializeForm(); } -}); +}, { immediate: true }); // Add immediate to handle initial render -const initializeForm = () => { +// Fetch detail data for edit mode +const fetchDetailData = async () => { + if (!props.id) return; + + loadingDetail.value = true; + errorDetail.value = false; + + try { + const response = await getAntrianOperasiById(props.id); + + if (response.success && response.data) { + const data = response.data; + + // Set form data to store + if (data.formData) { + pendaftaranStore.formData = { ...data.formData }; + } + + // Set diagnosis items to store + if (data.diagnosisItems) { + pendaftaranStore.diagnosisItems = [...data.diagnosisItems]; + } + + // Set tindakan items to store + if (data.tindakanItems) { + pendaftaranStore.tindakanItems = [...data.tindakanItems]; + } + + // Set rencana operasi data to store + if (data.rencanaOperasiData) { + const rencanaData = { ...data.rencanaOperasiData }; + + // Convert tanggalDaftar from ISO format to datetime-local format + if (rencanaData.tanggalDaftar) { + // Remove 'Z' and convert to local datetime format + const date = new Date(rencanaData.tanggalDaftar); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + rencanaData.tanggalDaftar = `${year}-${month}-${day}T${hours}:${minutes}`; + } + + pendaftaranStore.rencanaOperasiData = rencanaData; + } + + // Set dokter pelaksana items to store with proper mapping + if (data.dokterPelaksanaItems && Array.isArray(data.dokterPelaksanaItems)) { + // Map the API response to match Dokter interface + pendaftaranStore.dokterPelaksanaItems = data.dokterPelaksanaItems.map((dokter: any) => ({ + id: dokter.id, + nip: dokter.nip, + nama_lengkap: dokter.nama || dokter.nama_lengkap, + hfis_code: dokter.hfis_code || null, + nama_ksm: dokter.satuan_kerja || dokter.nama_ksm || '' + })); + } + + // Set status pasien data to store + if (data.statusPasienData) { + pendaftaranStore.statusPasienData = { ...data.statusPasienData }; + } + } + } catch (err) { + console.error('Error fetching detail data:', err); + errorDetail.value = true; + pendaftaranStore.showSnackbar('Gagal mengambil data detail', 'error'); + } finally { + loadingDetail.value = false; + } +}; + +const initializeForm = async () => { + // If edit or view mode, load data by id first + if ((props.mode === 'edit' || props.mode === 'view') && props.id) { + await fetchDetailData(); + return; // Don't reset form for edit/view mode + } + + // For create mode, reset form and set defaults pendaftaranStore.resetForm(); // Set default tanggal daftar ke now @@ -77,10 +167,15 @@ const initializeForm = () => { const minutes = String(now.getMinutes()).padStart(2, '0'); pendaftaranStore.rencanaOperasiData.tanggalDaftar = `${year}-${month}-${day}T${hours}:${minutes}`; - // If edit or view mode, load data by id - if ((props.mode === 'edit' || props.mode === 'view') && props.id) { - // TODO: Load data from API by id - // await pendaftaranStore.loadData(props.id); + // Set initial values from parent context + if (props.initialKategori !== undefined) { + pendaftaranStore.rencanaOperasiData.kategoriOperasi = props.initialKategori; + } + if (props.initialSpesialis !== undefined) { + pendaftaranStore.rencanaOperasiData.spesialis = props.initialSpesialis; + } + if (props.initialSubSpesialis !== undefined) { + pendaftaranStore.rencanaOperasiData.subSpesialis = props.initialSubSpesialis; } }; @@ -101,8 +196,10 @@ const handleSimpan = async () => { return; } - // Submit form using store action - const result = await pendaftaranStore.submitForm(); + // Submit form using store action - pass id if edit mode + const result = props.mode === 'edit' && props.id + ? await pendaftaranStore.submitForm(props.id) + : await pendaftaranStore.submitForm(); if (result.success) { emit('success'); @@ -133,7 +230,7 @@ const handleReset = () => { - + @@ -150,32 +247,40 @@ const handleReset = () => { - - - - - - + + + + + + + - - - - + + + + - - - - - - + + + + + + + diff --git a/components/pendaftaran/ModalUpdateStatus.vue b/components/pendaftaran/ModalUpdateStatus.vue new file mode 100644 index 0000000..4aded1b --- /dev/null +++ b/components/pendaftaran/ModalUpdateStatus.vue @@ -0,0 +1,416 @@ + + + + + + + + + Update Status Antrian Operasi + + + + + + + + + + Memuat data... + + + + + mdi-alert-circle + Gagal memuat data + + + Coba Lagi + + + + + + + + + + + Informasi Pasien + + + + + + + + No. Rekam Medis + {{ pasienData.formData?.noRekamMedis || '-' }} + + + + + Nama Pasien + {{ pasienData.formData?.namaPasien || '-' }} + + + + + Jenis Kelamin + {{ getGenderText(pasienData.formData?.jenisKelamin) }} + + + + + Tanggal Daftar + {{ formatDate(pasienData.rencanaOperasiData?.tanggalDaftar) }} + + + + + Kategori + + {{ pasienData.rencanaOperasiData?.kategoriName || '-' }} + + + + + + Spesialis + + {{ pasienData.rencanaOperasiData?.SpesialisName || '-' }} + + + + + + Sub Spesialis + + {{ pasienData.rencanaOperasiData?.SubSpesialisName || '-' }} + + + + + + + + + + + + + Update Status Operasi + + + + + + + + + Status Operasi * + + + + + + Belum + + + Selesai + + + Tunda + + + Batal + + + + + + + + + + Tanggal Selesai Operasi * + + + + + + + + Keterangan * + + + + + + + + + + + + + + + Batal + + + + Simpan + + + + + + + {{ snackbarMessage }} + + + Close + + + + + diff --git a/components/pendaftaran/RencanaOperasi.vue b/components/pendaftaran/RencanaOperasi.vue index 8a86f4e..7ba83f5 100644 --- a/components/pendaftaran/RencanaOperasi.vue +++ b/components/pendaftaran/RencanaOperasi.vue @@ -1,7 +1,6 @@ + Data Rencana Operasi - @@ -293,51 +333,131 @@ const handleDokterItemsPerPageUpdate = (items: unknown) => { Dokter Pelaksana - - - - No items - - - - + + - - - - {{ item.nama_lengkap }} - - {{ item.nip }} - {{ item.nama_ksm }} - - - - mdi-delete - - + {{ item.title }} + + + + + + + + {{ selectedDokterIds.includes(item.value) ? 'mdi-checkbox-marked' : 'mdi-checkbox-blank-outline' }} + - + + + + + + mdi-information + Ketik untuk mencari dokter, pilih untuk menambahkan + + + + + + + + + + + mdi-account-multiple + {{ dokterPelaksanaItems.length }} Dokter Terpilih + + + + + + mdi-doctor + + + + + {{ dokter.nama_lengkap }} + + + {{ dokter.nip }} • {{ dokter.nama_ksm }} + + + + + mdi-close-circle + + + + + + + + + + + + + + + mdi-doctor + + + + + {{ dokter.nama_lengkap }} + + + {{ dokter.nip }} • {{ dokter.nama_ksm }} + + + + - - Tambah Dokter Pelaksana - @@ -401,95 +521,4 @@ const handleDokterItemsPerPageUpdate = (items: unknown) => { - - - - - - - mdi-database - Select Item - - - mdi-close - - - - - - - - - - - - - - - - - - {{ item.nip }} - - - - - - {{ item.nama_lengkap }} - - - - - - {{ item.nama_ksm }} - - - - - - - - - - mdi-check - Simpan ({{ selectedDokters.length }}) - - - - diff --git a/components/pendaftaran/TableAntrian.vue b/components/pendaftaran/TableAntrian.vue index 0f7f6cb..027bf83 100644 --- a/components/pendaftaran/TableAntrian.vue +++ b/components/pendaftaran/TableAntrian.vue @@ -11,6 +11,7 @@ interface Props { minWidth?: string; actions?: Action[]; serverSide?: boolean; + loading?: boolean; totalItems?: number; currentPage?: number; } @@ -21,6 +22,7 @@ const props = withDefaults(defineProps(), { minWidth: '1200px', actions: () => [], serverSide: false, + loading: false, totalItems: 0, currentPage: 1 }); @@ -74,7 +76,19 @@ watch(itemsPerPageLocal, (newVal) => { - + + + + + + Memuat data... + + + { v-model:page="page" v-model:items-per-page="itemsPerPageLocal" :search="serverSide ? undefined : search" + :loading="loading" class="elevation-1" item-value="id" hide-default-footer striped="even" > + + + + + + + + + + mdi-database-off-outline + + Tidak ada data + + Tidak ada data yang tersedia untuk ditampilkan + + + @@ -144,7 +179,12 @@ watch(itemsPerPageLocal, (newVal) => { - + Pendaftaran Operasi Baru @@ -132,7 +163,11 @@ const handleItemsPerPageUpdate = (items: unknown) => { {{ new Date(item.TglDaftar).toLocaleDateString('id-ID', { @@ -144,4 +179,19 @@ const handleItemsPerPageUpdate = (items: unknown) => { + + + + + + diff --git a/pages/antrean/list-spesialis.vue b/pages/antrean/list-spesialis.vue index 37abbd7..b6f2333 100644 --- a/pages/antrean/list-spesialis.vue +++ b/pages/antrean/list-spesialis.vue @@ -1,6 +1,7 @@ @@ -58,7 +153,7 @@ const actions = [ placeholder="Filter Status" style="max-width: 200px;"> - + Pendaftaran Operasi Baru @@ -68,14 +163,41 @@ const actions = [ :headers="headers" :actions="actions" :items="antreanList" - :search="search" + :server-side="true" + :total-items="totalItems" + :current-page="currentPage" + :items-per-page="itemsPerPage" + :loading="loading" + min-width="1500px" + @view="handleView" + @edit="handleEdit" + @delete="handleDelete" + @update:page="handlePageUpdate" + @update:itemsPerPage="handleItemsPerPageUpdate" > - - {{ index + 1 }} + + {{ new Date(item.TglDaftar).toLocaleDateString('id-ID', { + year: 'numeric', month: 'short', + day: 'numeric', hour: 'numeric', minute: 'numeric' }) }} + + + + + + diff --git a/pages/antrean/subspesialis/[kode].vue b/pages/antrean/subspesialis/[kode].vue index eeb78a7..e358b58 100644 --- a/pages/antrean/subspesialis/[kode].vue +++ b/pages/antrean/subspesialis/[kode].vue @@ -1,15 +1,29 @@ @@ -59,7 +154,7 @@ const actions = [ placeholder="Filter Status" style="max-width: 200px;"> - + Pendaftaran Operasi Baru @@ -69,14 +164,42 @@ const actions = [ :headers="headers" :actions="actions" :items="antreanList" - :search="search" + :server-side="true" + :total-items="totalItems" + :current-page="currentPage" + :items-per-page="itemsPerPage" + :loading="loading" + min-width="1500px" + @view="handleView" + @edit="handleEdit" + @delete="handleDelete" + @update:page="handlePageUpdate" + @update:itemsPerPage="handleItemsPerPageUpdate" > - - {{ index + 1 }} + + {{ new Date(item.TglDaftar).toLocaleDateString('id-ID', { + year: 'numeric', month: 'short', + day: 'numeric', hour: 'numeric', minute: 'numeric' }) }} + + + + + + diff --git a/pages/auth/Login.vue b/pages/auth/Login.vue index d11f056..8ecdcff 100644 --- a/pages/auth/Login.vue +++ b/pages/auth/Login.vue @@ -56,14 +56,14 @@ @click="handleLogin" > mdi-account-circle - Log In with Keycloak + Login dengan Keycloak mdi-lock-outline - Not Authenticated + Belum terautentikasi diff --git a/pages/dashboard.vue b/pages/dashboard.vue index c9e94b9..5788ad3 100644 --- a/pages/dashboard.vue +++ b/pages/dashboard.vue @@ -1,8 +1,10 @@
Memuat data...
Gagal memuat data