update card, update design system, update layout anjungan
This commit is contained in:
+296
-8
@@ -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,
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user