From 2ccb378672b17532ae050ba2ab57c499932d8ad8 Mon Sep 17 00:00:00 2001 From: bagus-arie05 Date: Thu, 22 Jan 2026 09:32:43 +0700 Subject: [PATCH] update no rm dan desain --- .../features/queue/CurrentPatientCard.vue | 127 +++-- pages/AdminKlinikRuang/[kodeKlinik].vue | 483 ++++++++---------- pages/AdminLoket.vue | 6 +- pages/Anjungan/Anjungan/[id].vue | 196 ++++--- stores/clinicStore.js | 245 ++++----- stores/queueStore.js | 20 + 6 files changed, 506 insertions(+), 571 deletions(-) diff --git a/components/features/queue/CurrentPatientCard.vue b/components/features/queue/CurrentPatientCard.vue index 6cac806..0191bb6 100644 --- a/components/features/queue/CurrentPatientCard.vue +++ b/components/features/queue/CurrentPatientCard.vue @@ -34,66 +34,55 @@
- - - - - - - - - - - - + + mdi-swap-horizontal + {{ changeButtonText }} + + + mdi-clock-alert + Terlambat + + + mdi-pause + Pending + + + mdi-check + Selesai +
-
{{ patient.barcode }}
+
+
{{ patient.barcode }}
+ + RM: {{ patient.noRM }} + +
{{ patient.klinik }} | {{ patient.pembayaran }}
@@ -299,13 +288,23 @@ defineEmits(['action', 'change-klinik', 'process-next', 'call', 'open-klinik-rua } .action-icon-btn { - min-width: 48px !important; - width: 48px !important; - height: 36px !important; - padding: 0 !important; - border-radius: 18px !important; + min-width: auto !important; + width: auto !important; + height: 32px !important; + padding: 0 12px !important; + border-radius: 16px !important; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12); transition: all 0.2s ease; + text-transform: none !important; + display: flex !important; + align-items: center !important; + gap: 4px; +} + +.btn-label { + font-size: 10px; + font-weight: 600; + white-space: nowrap; } .action-icon-btn:hover { @@ -474,9 +473,9 @@ defineEmits(['action', 'change-klinik', 'process-next', 'call', 'open-klinik-rua } .action-icon-btn { - flex: 1 1 calc(50% - 3px); + flex: 1 1 auto; min-width: 0 !important; - max-width: calc(50% - 3px); + max-width: none !important; } } diff --git a/pages/AdminKlinikRuang/[kodeKlinik].vue b/pages/AdminKlinikRuang/[kodeKlinik].vue index 392b5ee..9add41f 100644 --- a/pages/AdminKlinikRuang/[kodeKlinik].vue +++ b/pages/AdminKlinikRuang/[kodeKlinik].vue @@ -66,34 +66,26 @@
- - - - - - + + mdi-pause + Pending + + + mdi-check + Selesai +
@@ -177,91 +169,95 @@ @@ -494,46 +490,36 @@ -
+
- mdi-door -
- Ruang {{ ruang.nomorRuang }} - {{ ruang.namaRuang }} - Screen: {{ ruang.nomorScreen }} -
-
+
+
{{ ruang.namaRuang }}
+
Ruang {{ ruang.nomorRuang }}
Saat Ini mdi-check-circle - - mdi-chevron-right -
@@ -592,18 +578,24 @@ - +
Nomor Antrian {{ selectedPatientDetail.noAntrian?.split(" |")[0] || '-' }}
- +
Barcode {{ selectedPatientDetail.barcode || '-' }}
+ +
+ No. RM + {{ selectedPatientDetail.noRM || '-' }} +
+
@@ -922,8 +914,6 @@ const getAllPatientsForRoom = (ruang) => { p.nomorRuang === ruang.nomorRuang && p.ruang === ruang.namaRuang && p.processStage === 'klinik-ruang' && - // Exclude pasien yang sedang diproses (current processing) - p.no !== getCurrentProcessingForRoom(ruang)?.no && // Include semua pasien dengan status yang relevan (p.status === 'waiting' || p.status === 'di-loket' || p.status === 'terlambat' || p.status === 'pending') ); @@ -1705,15 +1695,19 @@ const paginatedAllPatients = (ruang) => { }; // Helper untuk menentukan class card berdasarkan status pasien -const getPatientCardClass = (patient) => { +const getPatientCardClass = (patient, ruang) => { const baseClass = 'patient-queue-item'; const isFastTrack = (patient.fastTrack ?? '').toString().trim().toUpperCase() === 'YA'; + const isProcessing = patient.no === getCurrentProcessingForRoom(ruang)?.no; - // Jika pasien fast track, tambahkan class fast track - // Tidak perlu mengubah warna card jika sudah pemeriksaan awal/tindakan - return isFastTrack - ? `${baseClass} patient-queue-item-default patient-queue-item-fast-track` - : `${baseClass} patient-queue-item-default`; + let dynamicClass = 'patient-queue-item-default'; + if (isProcessing) { + dynamicClass = 'patient-queue-item-processing'; + } else if (isFastTrack) { + dynamicClass = 'patient-queue-item-fast-track'; + } + + return `${baseClass} ${dynamicClass}`; }; @@ -1984,22 +1978,32 @@ onMounted(() => { } .action-icon-btn { - min-width: 40px !important; - width: 40px !important; - height: 40px !important; - padding: 0 !important; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important; - transition: all 0.2s ease !important; + min-width: auto !important; + width: auto !important; + height: 32px !important; + padding: 0 12px !important; + border-radius: 16px !important; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12); + transition: all 0.2s ease; + text-transform: none !important; + display: flex !important; + align-items: center !important; + gap: 4px; } -.action-icon-btn:hover { - transform: translateY(-1px); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15) !important; +.btn-label { + font-size: 10px; + font-weight: 600; + white-space: nowrap; } -.action-icon-btn:active { - transform: translateY(0); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important; +.action-icon-btn:disabled { + background-color: #c59494 !important; + color: #ffffff !important; + opacity: 0.8; + cursor: not-allowed; + box-shadow: none !important; + transform: none !important; } .action-grid .v-btn { @@ -2015,17 +2019,15 @@ onMounted(() => { transition: all 0.2s ease; } -.action-grid .v-btn:hover { - transform: translateY(-1px); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); +.action-grid .v-btn:disabled { + background-color: var(--color-neutral-700) !important; + color: var(--color-neutral-100) !important; + opacity: 0.8 !important; + box-shadow: none !important; + transform: none !important; } -.action-grid .v-btn:active { - transform: translateY(0); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.empty-current { +.empty-current { text-align: center; padding: 24px 16px; background: var(--color-neutral-200); @@ -2284,17 +2286,43 @@ onMounted(() => { .patient-queue-item { display: flex; - justify-content: space-between; - align-items: flex-start; - padding: 16px 20px; + flex-direction: column; + padding: 12px 20px; border-radius: 8px; transition: all 0.2s ease; - gap: 24px; + gap: 4px; min-height: auto; width: 100%; box-sizing: border-box; } +.patient-card-header-row { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + gap: 16px; +} + +.patient-card-left-group { + display: flex; + align-items: center; + flex: 0 0 auto; +} + +.patient-card-right-group { + display: flex; + align-items: center; + flex: 0 0 auto; + justify-content: flex-end; +} + +.patient-card-bottom-row { + width: 100%; + display: flex; + justify-content: flex-start; +} + /* Pasien default */ .patient-queue-item-default { @@ -2307,6 +2335,16 @@ onMounted(() => { border-color: var(--color-neutral-400); } +/* Pasien sedang diproses */ +.patient-queue-item-processing { + background: linear-gradient(135deg, var(--color-primary-50) 0%, var(--color-primary-100) 100%) !important; + border: 1px solid var(--color-primary-400) !important; +} + +.patient-queue-item-processing:hover { + background: linear-gradient(135deg, var(--color-primary-100) 0%, var(--color-primary-200) 100%) !important; +} + /* Pasien fast track - harus setelah processed dan default agar bisa override */ .patient-queue-item-fast-track { background: #FBE9E8 !important; @@ -2331,13 +2369,7 @@ onMounted(() => { /* Left Section: Number and Status */ .patient-card-left { - display: flex; - flex-direction: column; - gap: 10px; - min-width: 160px; - max-width: 200px; - flex-shrink: 0; - flex: 0 0 auto; + display: none; } .patient-queue-number-wrapper { @@ -2456,14 +2488,7 @@ onMounted(() => { /* Right Section: Actions */ .patient-card-right { - display: flex; - align-items: flex-start; - flex: 1; - justify-content: flex-end; - min-width: 400px; - max-width: none; - padding-top: 2px; - box-sizing: border-box; + display: none; } .patient-queue-actions { @@ -2545,17 +2570,16 @@ onMounted(() => { } .patient-queue-item { - padding: 14px 16px; - gap: 20px; + padding: 10px 16px; + gap: 4px; } - .patient-card-left { - min-width: 150px; - max-width: 180px; + .patient-card-left-group { + min-width: 140px; } - .patient-card-right { - min-width: 360px; + .patient-card-right-group { + min-width: 300px; } .patient-queue-actions { @@ -2602,9 +2626,7 @@ onMounted(() => { } .action-icon-btn { - min-width: 36px !important; - width: 36px !important; - height: 36px !important; + height: 32px !important; } } @@ -2616,23 +2638,20 @@ onMounted(() => { } .patient-queue-item { - flex-direction: row; - align-items: flex-start; - gap: 12px; + padding: 8px 12px; + gap: 2px; } - .patient-card-left { - min-width: 100px; - flex: 0 0 auto; + .patient-card-header-row { + gap: 8px; + } + + .patient-card-left-group { + min-width: auto; } - .patient-card-right { - width: auto; - justify-content: flex-end; - padding-top: 2px; - flex: 1; - min-width: 300px; - max-width: 100%; + .patient-card-right-group { + min-width: auto; } .patient-queue-actions { @@ -2672,8 +2691,6 @@ onMounted(() => { } .action-icon-btn { - min-width: 32px !important; - width: 32px !important; height: 32px !important; } @@ -3051,63 +3068,9 @@ onMounted(() => { align-items: center; } -.ruang-list { - display: flex; - flex-direction: column; - gap: 8px; - padding: 8px 0; -} - -.ruang-item { - display: flex; - align-items: center; - gap: 12px; - padding: 12px 16px; - background: var(--color-neutral-300); - border: 1px solid var(--color-neutral-400); - border-radius: 8px; - cursor: pointer; - transition: all 0.2s ease; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.ruang-item:hover:not(.ruang-item-disabled) { - border-color: var(--color-primary-400); - background: rgba(58, 97, 201, 0.1); - transform: translateY(-1px); - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); -} - -.ruang-item:active:not(.ruang-item-disabled) { - transform: translateY(0); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.ruang-item-selected { - background: var(--color-primary-100); - border-color: var(--color-primary-600); - box-shadow: 0 2px 8px rgba(58, 97, 201, 0.2); -} - -.ruang-item-disabled { - background: var(--color-neutral-200); - border-color: var(--color-neutral-400); - cursor: not-allowed; - opacity: 0.6; -} - -.ruang-item-disabled:hover { - transform: none; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - border-color: var(--color-neutral-400); - background: var(--color-neutral-200); -} - -.ruang-info { - flex: 1; - display: flex; - flex-direction: column; - gap: 2px; +/* Ruang List replacement with common grid styles */ +.expansion-panel-text :deep(.v-expansion-panel-text__wrapper) { + padding: 8px 16px 16px !important; } .ruang-actions { diff --git a/pages/AdminLoket.vue b/pages/AdminLoket.vue index 3acc9c2..16acf70 100644 --- a/pages/AdminLoket.vue +++ b/pages/AdminLoket.vue @@ -181,8 +181,6 @@ > mdi-door
Ruang {{ ruang.nomorRuang }}
-
{{ ruang.namaRuang }}
-
Screen: {{ ruang.nomorScreen }}
@@ -757,14 +755,14 @@ const buatAntreanKlinikRuang = async (klinikRuang, ruang) => { flex-direction: column; align-items: center; justify-content: center; - padding: 16px 12px; + padding: 12px 8px; background: var(--color-neutral-100); border: 1px solid var(--color-neutral-400); border-radius: 8px; cursor: pointer; transition: all 0.2s ease; text-align: center; - min-height: 120px; + min-height: 80px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } diff --git a/pages/Anjungan/Anjungan/[id].vue b/pages/Anjungan/Anjungan/[id].vue index c78de0e..6b89d3a 100644 --- a/pages/Anjungan/Anjungan/[id].vue +++ b/pages/Anjungan/Anjungan/[id].vue @@ -175,21 +175,22 @@
-

Dokter yang Tersedia:

-
+

Dokter yang Tersedia:

+
-
- - mdi-doctor - - {{ doctor }} -
+ + mdi-doctor + + {{ doctor }}
+

+ Tidak ada dokter tersedia untuk klinik ini +

@@ -672,6 +673,7 @@