update card, update design system, update layout anjungan

This commit is contained in:
bagus-arie05
2025-12-05 10:21:16 +07:00
parent 817bf8f548
commit 9b3fd7b314
23 changed files with 5064 additions and 2991 deletions
+296 -8
View File
@@ -1,4 +1,4 @@
// stores/masterStore.js
// stores/masterStore.js - Integrated dengan Penunjang
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
@@ -355,6 +355,258 @@ export const useMasterStore = defineStore('master', () => {
return allRuang;
});
// ============================================
// MASTER PENUNJANG
// ============================================
const penunjangData = ref([
{
id: 1,
no: 1,
kode: 'LAB',
nama: 'LABORATORIUM',
jenis: 'Medis',
shift: 3,
totalQuota: 150,
jamShiftList: [
{ dari: '07:00', sampai: '15:00', kuota: 60 },
{ dari: '13:00', sampai: '21:00', kuota: 50 },
{ dari: '21:00', sampai: '07:00', kuota: 40 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
status: 'Aktif',
estimasiLayanan: 30,
keterangan: 'Pemeriksaan darah lengkap, urine, dan pemeriksaan laboratorium lainnya'
},
{
id: 2,
no: 2,
kode: 'RAD',
nama: 'RADIOLOGI',
jenis: 'Medis',
shift: 2,
totalQuota: 100,
jamShiftList: [
{ dari: '07:00', sampai: '15:00', kuota: 60 },
{ dari: '13:00', sampai: '21:00', kuota: 40 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu'],
status: 'Aktif',
estimasiLayanan: 45,
keterangan: 'Rontgen, CT Scan, MRI, USG, dan pemeriksaan radiologi lainnya'
},
{
id: 3,
no: 3,
kode: 'PAT',
nama: 'PATOLOGI ANATOMI',
jenis: 'Medis',
shift: 1,
totalQuota: 50,
jamShiftList: [
{ dari: '07:00', sampai: '15:00', kuota: 50 }
],
autoShift: false,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at'],
status: 'Aktif',
estimasiLayanan: 60,
keterangan: 'Pemeriksaan jaringan dan sitologi'
},
{
id: 4,
no: 4,
kode: 'RHB',
nama: 'REHABILITASI MEDIK',
jenis: 'Medis',
shift: 2,
totalQuota: 80,
jamShiftList: [
{ dari: '07:00', sampai: '13:00', kuota: 40 },
{ dari: '13:00', sampai: '19:00', kuota: 40 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at'],
status: 'Aktif',
estimasiLayanan: 30,
keterangan: 'Fisioterapi, terapi okupasi, dan terapi wicara'
},
{
id: 5,
no: 5,
kode: 'RME',
nama: 'REKAM MEDIS',
jenis: 'Non-Medis',
shift: 2,
totalQuota: 120,
jamShiftList: [
{ dari: '07:00', sampai: '15:00', kuota: 70 },
{ dari: '13:00', sampai: '21:00', kuota: 50 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu'],
status: 'Aktif',
estimasiLayanan: 15,
keterangan: 'Pengurusan dokumen rekam medis dan surat keterangan'
},
{
id: 6,
no: 6,
kode: 'GIZ',
nama: 'GIZI',
jenis: 'Non-Medis',
shift: 2,
totalQuota: 60,
jamShiftList: [
{ dari: '07:00', sampai: '13:00', kuota: 30 },
{ dari: '13:00', sampai: '19:00', kuota: 30 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at'],
status: 'Aktif',
estimasiLayanan: 20,
keterangan: 'Konsultasi gizi dan diet'
},
{
id: 7,
no: 7,
kode: 'LND',
nama: 'LAUNDRY',
jenis: 'Non-Medis',
shift: 3,
totalQuota: 200,
jamShiftList: [
{ dari: '06:00', sampai: '14:00', kuota: 80 },
{ dari: '14:00', sampai: '22:00', kuota: 70 },
{ dari: '22:00', sampai: '06:00', kuota: 50 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
status: 'Aktif',
estimasiLayanan: 10,
keterangan: 'Layanan laundry linen rumah sakit'
},
{
id: 8,
no: 8,
kode: 'INF',
nama: 'PELAYANAN INFORMASI',
jenis: 'Non-Medis',
shift: 2,
totalQuota: 150,
jamShiftList: [
{ dari: '07:00', sampai: '15:00', kuota: 80 },
{ dari: '13:00', sampai: '21:00', kuota: 70 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
status: 'Aktif',
estimasiLayanan: 10,
keterangan: 'Informasi umum rumah sakit dan bantuan navigasi'
},
{
id: 9,
no: 9,
kode: 'FRM',
nama: 'FARMASI',
jenis: 'Medis',
shift: 3,
totalQuota: 200,
jamShiftList: [
{ dari: '07:00', sampai: '15:00', kuota: 80 },
{ dari: '13:00', sampai: '21:00', kuota: 70 },
{ dari: '21:00', sampai: '07:00', kuota: 50 }
],
autoShift: true,
jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
status: 'Aktif',
estimasiLayanan: 20,
keterangan: 'Pelayanan obat dan konsultasi farmasi'
}
]);
// Computed - Penunjang
const totalPenunjang = computed(() => penunjangData.value.length);
const activePenunjang = computed(() => penunjangData.value.filter(p => p.status === 'Aktif'));
const penunjangMedis = computed(() => penunjangData.value.filter(p => p.jenis === 'Medis'));
const penunjangNonMedis = computed(() => penunjangData.value.filter(p => p.jenis === 'Non-Medis'));
// Get penunjang list for dropdowns
const penunjangList = computed(() =>
penunjangData.value
.filter(p => p.status === 'Aktif')
.map(p => ({
id: p.id,
kode: p.kode,
nama: p.nama
}))
);
// Actions - Penunjang
const addPenunjang = (penunjangPayload) => {
const newId = Math.max(...penunjangData.value.map(p => p.id), 0) + 1;
const newNo = penunjangData.value.length + 1;
const totalQuota = penunjangPayload.jamShiftList.reduce((total, shift) => {
return total + (parseInt(shift.kuota) || 0);
}, 0);
const newPenunjang = {
id: newId,
no: newNo,
...penunjangPayload,
totalQuota: totalQuota,
};
penunjangData.value.push(newPenunjang);
return { success: true, message: `Penunjang ${newPenunjang.nama} berhasil ditambahkan`, data: newPenunjang };
};
const updatePenunjang = (penunjangPayload) => {
const index = penunjangData.value.findIndex(p => p.id === penunjangPayload.id);
if (index !== -1) {
const totalQuota = penunjangPayload.jamShiftList.reduce((total, shift) => {
return total + (parseInt(shift.kuota) || 0);
}, 0);
penunjangData.value[index] = {
...penunjangData.value[index],
...penunjangPayload,
totalQuota: totalQuota,
};
return { success: true, message: `Penunjang ${penunjangPayload.nama} berhasil diupdate` };
}
return { success: false, message: 'Penunjang tidak ditemukan' };
};
const deletePenunjang = (penunjangId) => {
const index = penunjangData.value.findIndex(p => p.id === penunjangId);
if (index !== -1) {
const penunjangName = penunjangData.value[index].nama;
penunjangData.value.splice(index, 1);
penunjangData.value.forEach((p, idx) => {
p.no = idx + 1;
});
return { success: true, message: `Penunjang ${penunjangName} berhasil dihapus` };
}
return { success: false, message: 'Penunjang tidak ditemukan' };
};
const getPenunjangById = (id) => {
return penunjangData.value.find(p => p.id === id);
};
const getPenunjangByKode = (kode) => {
return penunjangData.value.find(p => p.kode === kode);
};
// Get active penunjang list (untuk Admin Penunjang)
const getActivePenunjangList = () => {
return penunjangData.value
.filter(p => p.status === 'Aktif')
.map(p => ({ id: p.id, name: p.nama, kode: p.kode }));
};
// ============================================
// UTILITY FUNCTIONS
// ============================================
@@ -363,41 +615,77 @@ export const useMasterStore = defineStore('master', () => {
return klinik ? klinik.nama : kode;
};
const getPenunjangNameByKode = (kode) => {
const penunjang = penunjangData.value.find(p => p.kode === kode);
return penunjang ? penunjang.nama : kode;
};
return {
// State - Klinik
// ============================================
// KLINIK
// ============================================
// State
klinikData,
klinikList,
// Actions - Klinik
// Actions
addKlinik,
updateKlinik,
deleteKlinik,
getKlinikById,
getKlinikByKode,
// State - Loket
// ============================================
// LOKET
// ============================================
// State
loketData,
availableServices,
// Actions - Loket
// Actions
addLoket,
updateLoket,
deleteLoket,
getLoketById,
// State - Ruang
// ============================================
// RUANG
// ============================================
// State
ruangData,
totalKlinikRuang,
totalRuangan,
getAllRuangList,
// Actions - Ruang
// Actions
addRuang,
updateRuang,
deleteRuang,
getRuangByKlinik,
// Utilities
// ============================================
// PENUNJANG
// ============================================
// State
penunjangData,
totalPenunjang,
activePenunjang,
penunjangMedis,
penunjangNonMedis,
penunjangList,
// Actions
addPenunjang,
updatePenunjang,
deletePenunjang,
getPenunjangById,
getPenunjangByKode,
getActivePenunjangList,
// ============================================
// UTILITIES
// ============================================
getKlinikNameByKode,
getPenunjangNameByKode,
};
});