fix: get control letter of doctor
This commit is contained in:
@@ -341,7 +341,7 @@ async function handleEvent(menu: string, value: any) {
|
||||
if (menu === 'service-type') {
|
||||
selectedServiceType.value = value
|
||||
doctors.value = await getDoctorLabelList({
|
||||
serviceType: selectedServiceType.value || 1,
|
||||
serviceType: selectedServiceType.value || '2',
|
||||
serviceDate: new Date().toISOString().substring(0, 10),
|
||||
specialistCode: 0,
|
||||
})
|
||||
@@ -369,13 +369,33 @@ async function handleEvent(menu: string, value: any) {
|
||||
}
|
||||
if (menu === 'search-letter') {
|
||||
isLetterReadonly.value = false
|
||||
getLetterMappers(value.admissionType, value.search).then(() => {
|
||||
getLetterMappers(value.admissionType, value.search).then(async () => {
|
||||
if (letters.value.length > 0) {
|
||||
const copyObjects = { ...selectedObjects.value }
|
||||
const letter = letters.value[0]
|
||||
selectedObjects.value = {}
|
||||
selectedLetter.value = letter.letterNumber
|
||||
selectedLetter.value = letter.letterNumber
|
||||
isLetterReadonly.value = true
|
||||
if (letter.information || letter.clinic) {
|
||||
const poly = value.admissionType === '3' ? letter.clinic : letter.information?.poly
|
||||
if (poly) {
|
||||
const resultControl = await getControlLetterList({
|
||||
mode: 'by-schedule',
|
||||
controlDate: letter.plannedDate,
|
||||
controlType: selectedServiceType.value,
|
||||
polyCode: poly,
|
||||
})
|
||||
if (resultControl && resultControl.success && resultControl.body) {
|
||||
const resultData = resultControl.body?.response?.list || []
|
||||
const resultUnique = [...new Map(resultData.map((item: any) => [item.kode, item])).values()]
|
||||
const controlLetters = resultUnique.map((item: any) => ({
|
||||
value: item.kodeDokter ? String(item.kodeDokter) : '',
|
||||
label: `${item.kodeDokter} - ${item.namaDokter} - ${item.jadwalPraktek} (${item.kapasitas})`,
|
||||
}))
|
||||
doctors.value = controlLetters
|
||||
}
|
||||
}
|
||||
}
|
||||
setTimeout(async () => {
|
||||
selectedObjects.value = copyObjects
|
||||
selectedObjects.value['letterDate'] = letter.plannedDate
|
||||
@@ -420,7 +440,7 @@ async function handleEvent(menu: string, value: any) {
|
||||
}
|
||||
if (menu === 'save-sep') {
|
||||
isSaveLoading.value = true
|
||||
|
||||
|
||||
// Map letter data to form if admissionType !== '3' and letters.value has data
|
||||
let mappedValues = value
|
||||
if (selectedAdmissionType.value !== '3') {
|
||||
@@ -456,7 +476,7 @@ async function handleEvent(menu: string, value: any) {
|
||||
if (!value.clinicExcecutive) {
|
||||
mappedValues.clinicExcecutive = 'no'
|
||||
}
|
||||
|
||||
|
||||
createSep(makeSepData(mappedValues))
|
||||
.then((res) => {
|
||||
const body = res?.body
|
||||
@@ -492,13 +512,13 @@ async function handleFetch(params: any) {
|
||||
if (menu === 'clinic-from') {
|
||||
facilitiesFrom.value = await getHealthFacilityLabelList({
|
||||
healthcare: value,
|
||||
healthcareType: selectedServiceType.value || 1,
|
||||
healthcareType: selectedServiceType.value || 2,
|
||||
})
|
||||
}
|
||||
if (menu === 'clinic-to') {
|
||||
facilitiesTo.value = await getHealthFacilityLabelList({
|
||||
healthcare: value,
|
||||
healthcareType: selectedServiceType.value || 1,
|
||||
healthcareType: selectedServiceType.value || 2,
|
||||
})
|
||||
}
|
||||
if (menu === 'province') {
|
||||
@@ -523,6 +543,7 @@ async function handleFetchSpecialists() {
|
||||
}
|
||||
|
||||
async function handleInit() {
|
||||
selectedServiceType.value = '2'
|
||||
const facilities = await getHealthFacilityLabelList({
|
||||
healthcare: 'Puskesmas',
|
||||
healthcareType: selectedLetter.value || 1,
|
||||
@@ -531,7 +552,7 @@ async function handleInit() {
|
||||
facilitiesFrom.value = facilities
|
||||
facilitiesTo.value = facilities
|
||||
doctors.value = await getDoctorLabelList({
|
||||
serviceType: selectedServiceType.value || 1,
|
||||
serviceType: selectedServiceType.value || '2',
|
||||
serviceDate: new Date().toISOString().substring(0, 10),
|
||||
specialistCode: 0,
|
||||
})
|
||||
@@ -616,44 +637,20 @@ onMounted(async () => {
|
||||
|
||||
<template>
|
||||
<div class="mb-5 border-b border-b-slate-300 pb-3 text-lg xl:text-xl">
|
||||
<Icon
|
||||
name="i-lucide-panel-bottom"
|
||||
class="me-2"
|
||||
/>
|
||||
<Icon name="i-lucide-panel-bottom" class="me-2" />
|
||||
<span class="font-semibold">Tambah</span>
|
||||
SEP
|
||||
</div>
|
||||
<AppSepEntryForm
|
||||
:is-save-loading="isSaveLoading"
|
||||
:is-service="isServiceHidden"
|
||||
:doctors="doctors"
|
||||
:diagnoses="diagnoses"
|
||||
:facilities-from="facilitiesFrom"
|
||||
:facilities-to="facilitiesTo"
|
||||
:service-types="serviceTypesList"
|
||||
:register-methods="registerMethodsList"
|
||||
:accidents="accidentsList"
|
||||
:purposes="purposeOfVisitsList"
|
||||
:procedures="proceduresList"
|
||||
:assessments="assessmentsList"
|
||||
:support-codes="supportCodesList"
|
||||
:provinces="provincesList"
|
||||
:cities="citiesList"
|
||||
:districts="districtsList"
|
||||
:class-levels="classLevelsList"
|
||||
:class-level-upgrades="classLevelUpgradesList"
|
||||
:class-pay-sources="classPaySourcesList"
|
||||
:specialists="specialistsTree"
|
||||
:objects="selectedObjects"
|
||||
@fetch="handleFetch"
|
||||
@event="handleEvent"
|
||||
/>
|
||||
<AppViewPatient
|
||||
v-model:open="openPatient"
|
||||
v-model:selected="selectedPatient"
|
||||
:patients="patients"
|
||||
:pagination-meta="paginationMeta"
|
||||
@fetch="
|
||||
<AppSepEntryForm :is-save-loading="isSaveLoading" :is-service="isServiceHidden" :doctors="doctors"
|
||||
:diagnoses="diagnoses" :facilities-from="facilitiesFrom" :facilities-to="facilitiesTo"
|
||||
:service-types="serviceTypesList" :register-methods="registerMethodsList" :accidents="accidentsList"
|
||||
:purposes="purposeOfVisitsList" :procedures="proceduresList" :assessments="assessmentsList"
|
||||
:support-codes="supportCodesList" :provinces="provincesList" :cities="citiesList" :districts="districtsList"
|
||||
:class-levels="classLevelsList" :class-level-upgrades="classLevelUpgradesList"
|
||||
:class-pay-sources="classPaySourcesList" :specialists="specialistsTree" :objects="selectedObjects"
|
||||
@fetch="handleFetch" @event="handleEvent" />
|
||||
<AppViewPatient v-model:open="openPatient" v-model:selected="selectedPatient" :patients="patients"
|
||||
:pagination-meta="paginationMeta" @fetch="
|
||||
(value) => {
|
||||
if (value.search && value.search.length >= 3) {
|
||||
// Use identifier search for specific searches (NIK, RM, etc.)
|
||||
@@ -663,20 +660,10 @@ onMounted(async () => {
|
||||
getPatientsList({ ...value, 'page-size': 10, includes: 'person' })
|
||||
}
|
||||
}
|
||||
"
|
||||
@save="handleSavePatient"
|
||||
/>
|
||||
<AppViewHistory
|
||||
v-model:open="openHistory"
|
||||
:histories="histories"
|
||||
/>
|
||||
<AppViewLetter
|
||||
v-model:open="openLetter"
|
||||
:letters="letters"
|
||||
:menu="selectedAdmissionType !== '3' ? 'control' : 'reference'"
|
||||
:selected="selectedLetter"
|
||||
" @save="handleSavePatient" />
|
||||
<AppViewHistory v-model:open="openHistory" :histories="histories" />
|
||||
<AppViewLetter v-model:open="openLetter" :letters="letters"
|
||||
:menu="selectedAdmissionType !== '3' ? 'control' : 'reference'" :selected="selectedLetter"
|
||||
:pagination-meta="{ recordCount: 0, page: 1, pageSize: 10, totalPage: 0 } as any"
|
||||
@fetch="(value) => getLetterMappers(value.admissionType, value.search)"
|
||||
@save="handleSaveLetter"
|
||||
/>
|
||||
@fetch="(value) => getLetterMappers(value.admissionType, value.search)" @save="handleSaveLetter" />
|
||||
</template>
|
||||
|
||||
@@ -107,10 +107,7 @@ const headerPrep: HeaderPrep = {
|
||||
},
|
||||
}
|
||||
|
||||
async function getMonitoringVisitMappers() {
|
||||
isLoading.dataListLoading = true
|
||||
data.value = []
|
||||
|
||||
function getDateFilter() {
|
||||
let dateFilter = '';
|
||||
const isTimeLocal = true
|
||||
const dateFirst = dateSelection.value && dateSelection.value.start ? dateSelection.value.start.toDate(getLocalTimeZone()) : new Date()
|
||||
@@ -120,9 +117,15 @@ async function getMonitoringVisitMappers() {
|
||||
} else {
|
||||
dateFilter = dateFirst.toISOString().substring(0, 10)
|
||||
}
|
||||
|
||||
return dateFilter
|
||||
}
|
||||
|
||||
async function getMonitoringVisitMappers() {
|
||||
isLoading.dataListLoading = true
|
||||
data.value = []
|
||||
const dateFilter = getDateFilter()
|
||||
const result = await geMonitoringVisitList({
|
||||
date: dateFilter,
|
||||
date: dateFilter || '',
|
||||
serviceType: serviceType.value,
|
||||
})
|
||||
|
||||
@@ -241,35 +244,20 @@ provide('table_data_loader', isLoading)
|
||||
<!-- Filter Bar -->
|
||||
<div class="my-2 flex flex-wrap items-center gap-2">
|
||||
<!-- Search -->
|
||||
<Input
|
||||
v-model="search"
|
||||
placeholder="Cari No. SEP / No. Kartu BPJS..."
|
||||
class="w-72"
|
||||
/>
|
||||
<Input v-model="search" placeholder="Cari No. SEP / No. Kartu BPJS..." class="w-72" />
|
||||
|
||||
<!-- Filter -->
|
||||
<div class="w-72">
|
||||
<Select
|
||||
id="serviceType"
|
||||
icon-name="i-lucide-chevron-down"
|
||||
v-model="serviceType"
|
||||
:items="serviceTypesList"
|
||||
placeholder="Pilih Pelayanan"
|
||||
/>
|
||||
<Select id="serviceType" icon-name="i-lucide-chevron-down" v-model="serviceType" :items="serviceTypesList"
|
||||
placeholder="Pilih Pelayanan" />
|
||||
</div>
|
||||
|
||||
<!-- Date Range -->
|
||||
<Popover>
|
||||
<PopoverTrigger as-child>
|
||||
<Button
|
||||
variant="outline"
|
||||
class="h-[40px] w-72 border-gray-400 bg-white text-right font-normal"
|
||||
>
|
||||
<Button variant="outline" class="h-[40px] w-72 border-gray-400 bg-white text-right font-normal">
|
||||
{{ dateRange }}
|
||||
<Icon
|
||||
name="i-lucide-calendar"
|
||||
class="h-5 w-5"
|
||||
/>
|
||||
<Icon name="i-lucide-calendar" class="h-5 w-5" />
|
||||
</Button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent class="p-2">
|
||||
@@ -280,14 +268,9 @@ provide('table_data_loader', isLoading)
|
||||
<!-- Export -->
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger as-child>
|
||||
<Button
|
||||
variant="outline"
|
||||
class="ml-auto h-[40px] w-[120px] rounded-md border-green-600 text-green-600 hover:bg-green-50"
|
||||
>
|
||||
<Icon
|
||||
name="i-lucide-download"
|
||||
class="h-5 w-5"
|
||||
/>
|
||||
<Button variant="outline"
|
||||
class="ml-auto h-[40px] w-[120px] rounded-md border-green-600 text-green-600 hover:bg-green-50">
|
||||
<Icon name="i-lucide-download" class="h-5 w-5" />
|
||||
Ekspor
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
@@ -299,54 +282,35 @@ provide('table_data_loader', isLoading)
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<AppSepList
|
||||
v-if="!isLoading.dataListLoading"
|
||||
:data="data"
|
||||
@update:modelValue="onRowSelected"
|
||||
/>
|
||||
<AppSepList v-if="!isLoading.dataListLoading" :data="data" @update:modelValue="onRowSelected" />
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
<template v-if="paginationMeta">
|
||||
<div v-if="paginationMeta.totalPage > 1">
|
||||
<PubMyUiPagination
|
||||
:pagination-meta="paginationMeta"
|
||||
@page-change="handlePageChange"
|
||||
/>
|
||||
<PubMyUiPagination :pagination-meta="paginationMeta" @page-change="handlePageChange" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Trigger button -->
|
||||
<Dialog v-model:open="open">
|
||||
<DialogTrigger as-child></DialogTrigger>
|
||||
|
||||
<DialogContent class="sm:max-w-md">
|
||||
<DialogHeader>
|
||||
<DialogTitle>Hapus SEP</DialogTitle>
|
||||
</DialogHeader>
|
||||
|
||||
<DialogDescription class="text-gray-700">Apakah anda yakin ingin menghapus SEP dengan data:</DialogDescription>
|
||||
|
||||
<div class="mt-4 space-y-2 text-sm">
|
||||
<p>No. SEP : {{ sepData.sepNumber }}</p>
|
||||
<p>No. Kartu BPJS : {{ sepData.cardNumber }}</p>
|
||||
<p>Nama Pasien : {{ sepData.patientName }}</p>
|
||||
<p><strong>>No. SEP:</strong> {{ sepData.sepNumber }}</p>
|
||||
<p><strong>No. Kartu BPJS:</strong> {{ sepData.cardNumber }}</p>
|
||||
<p><strong>Nama Pasien:</strong> {{ sepData.patientName }}</p>
|
||||
</div>
|
||||
|
||||
<DialogFooter class="mt-6 flex justify-end gap-3">
|
||||
<Button
|
||||
variant="outline"
|
||||
class="border-green-600 text-green-600 hover:bg-green-50"
|
||||
@click="handleRemove"
|
||||
>
|
||||
<Button variant="outline" class="border-green-600 text-green-600 hover:bg-green-50" @click="handleRemove">
|
||||
<X class="mr-1 h-4 w-4" />
|
||||
Tidak
|
||||
</Button>
|
||||
<Button
|
||||
variant="destructive"
|
||||
class="bg-red-600 hover:bg-red-700"
|
||||
@click="handleRemove"
|
||||
>
|
||||
<Button variant="destructive" class="bg-red-600 hover:bg-red-700" @click="handleRemove">
|
||||
<Check class="mr-1 h-4 w-4" />
|
||||
Ya
|
||||
</Button>
|
||||
|
||||
@@ -6,6 +6,7 @@ const name = 'rencana-kontrol'
|
||||
|
||||
export function getList(params: any = null) {
|
||||
let url = path
|
||||
console.log(params)
|
||||
if (params?.letterNumber && params.mode === 'by-control') {
|
||||
url += `/noSuratKontrol/${params.letterNumber}`
|
||||
}
|
||||
@@ -15,11 +16,11 @@ export function getList(params: any = null) {
|
||||
if (params?.letterNumber && params.mode === 'by-sep') {
|
||||
url += `/${params.letterNumber}`
|
||||
}
|
||||
if (params?.letterNumber && params.mode === 'by-schedule') {
|
||||
url += `/jadwalDokter?jeniskontrol=${params.controlType}&kodepoli=${params.poliCode}&tanggalkontrol=${params.controlDate}`
|
||||
if (params?.controlDate && params.mode === 'by-schedule') {
|
||||
url += `/jadwalDokter?jeniskontrol=${params.controlType}&kodepoli=${params.polyCode}&tanggalkontrol=${params.controlDate}`
|
||||
delete params.controlType
|
||||
delete params.poliCode
|
||||
delete params.controlDate
|
||||
delete params.polyCode
|
||||
}
|
||||
if (params) {
|
||||
delete params.letterNumber
|
||||
|
||||
Reference in New Issue
Block a user