feat(sep): refactor table letter

This commit is contained in:
riefive
2025-10-28 14:01:09 +07:00
parent 87762cf17a
commit aeaefb9478
7 changed files with 316 additions and 149 deletions
+90 -39
View File
@@ -6,6 +6,7 @@ import { useRoute } from 'vue-router'
import AppSepEntryForm from '~/components/app/sep/entry-form.vue'
import AppViewPatient from '~/components/app/patient/view-patient.vue'
import AppViewHistory from '~/components/app/sep/view-history.vue'
import AppViewLetter from '~/components/app/sep/view-letter.vue'
import { toast } from '~/components/pub/ui/toast'
// Types
@@ -33,17 +34,19 @@ import { getValueLabelList as getDistrictList } from '~/services/vclaim-region-d
import { getValueLabelList as getDoctorLabelList } from '~/services/vclaim-doctor.service'
import { getValueLabelList as getHealthFacilityLabelList } from '~/services/vclaim-healthcare.service'
import { getValueLabelList as getDiagnoseLabelList } from '~/services/vclaim-diagnose.service'
import { getList as getHospitalLetterList } from '~/services/vclaim-reference-hospital-letter.service'
import { getList as getControlLetterList } from '~/services/vclaim-control-letter.service'
import { getList as geMonitoringVisitList } from '~/services/vclaim-monitoring-visit.service'
import { getList as getMonitoringHistoryList } from '~/services/vclaim-monitoring-history.service'
import { create as createSep, makeSepData } from '~/services/vclaim-sep.service'
// Handlers
import {
patients,
selectedPatient,
selectedPatientObject,
paginationMeta,
getPatientsList,
import {
patients,
selectedPatient,
selectedPatientObject,
paginationMeta,
getPatientsList,
getPatientCurrent,
getPatientByIdentifierSearch,
} from '~/handlers/patient.handler'
@@ -57,6 +60,7 @@ const selectedObjects = ref<any>({})
const selectedServiceType = ref<string>('')
const histories = ref<Array<SepHistoryData>>([])
const visits = ref<Array<SepVisitData>>([])
const letters = ref<Array<any>>([])
const doctors = ref<Array<{ value: string | number; label: string }>>([])
const diagnoses = ref<Array<{ value: string | number; label: string }>>([])
const facilitiesFrom = ref<Array<{ value: string | number; label: string }>>([])
@@ -144,28 +148,68 @@ async function getMonitoringVisitMappers() {
}
}
const letters = [
{
noSurat: 'SK22334442',
tglRencana: '12 Agustus 2025',
noSep: 'SEP3232332',
namaPasien: 'Ahmad Baidowi',
noBpjs: '33442331214',
klinik: 'Penyakit Dalam',
dokter: 'dr. Andi Prasetyo, Sp.PD-KHOM',
},
{
noSurat: 'SK99120039',
tglRencana: '12 Agustus 2025',
noSep: 'SEP4443232',
namaPasien: 'Bian Maulana',
noBpjs: '33442367656',
klinik: 'Gigi',
dokter: 'dr. Achmad Suparjo',
},
]
async function getLetterMappers(admissionType: string, search: string) {
letters.value = []
let result = null
if (admissionType !== '3') {
result = await getHospitalLetterList({
letterNumber: search,
})
} else {
result = await getControlLetterList({
letterNumber: search,
mode: 'by-control',
})
if (result && result.success && result.body) {
const lettersRaw = result.body?.response || null
if (!lettersRaw) {
result = await getControlLetterList({
letterNumber: search,
mode: 'by-card',
})
}
}
if (result && result.success && result.body) {
const lettersRaw = result.body?.response || null
if (!lettersRaw) {
result = await getControlLetterList({
letterNumber: search,
mode: 'by-sep',
})
}
}
}
if (result && result.success && result.body) {
const lettersRaw = result.body?.response || null
console.log(lettersRaw)
// {
// noSurat: 'SK22334442',
// tglRencana: '12 Agustus 2025',
// noSep: 'SEP3232332',
// namaPasien: 'Ahmad Baidowi',
// noBpjs: '33442331214',
// klinik: 'Penyakit Dalam',
// dokter: 'dr. Andi Prasetyo, Sp.PD-KHOM',
// },
function handleSavePatient() {
// {
// noSurat: 'SK99120039',
// tglRencana: '12 Agustus 2025',
// noSep: 'SEP4443232',
// namaPasien: 'Bian Maulana',
// noBpjs: '33442367656',
// klinik: 'Gigi',
// dokter: 'dr. Achmad Suparjo',
// },
if (!lettersRaw) return
lettersRaw.forEach((result: any) => {
// letters.value.push({})
})
}
}
function handleSavePatient() {
selectedPatientObject.value = null
setTimeout(() => {
getPatientCurrent(selectedPatient.value)
@@ -196,10 +240,7 @@ async function handleEvent(menu: string, value: any) {
return
}
if (menu === 'search-letter') {
getMonitoringVisitMappers().then(() => {
openLetter.value = true
})
return
openLetter.value = true
}
if (menu === 'history-sep') {
getMonitoringHistoryMappers().then(() => {
@@ -401,15 +442,17 @@ onMounted(async () => {
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.)
getPatientByIdentifierSearch(value.search)
} else {
// Use regular search for general searches
getPatientsList({ ...value, 'page-size': 10, includes: 'person' })
@fetch="
(value) => {
if (value.search && value.search.length >= 3) {
// Use identifier search for specific searches (NIK, RM, etc.)
getPatientByIdentifierSearch(value.search)
} else {
// Use regular search for general searches
getPatientsList({ ...value, 'page-size': 10, includes: 'person' })
}
}
}"
"
@save="handleSavePatient"
/>
<AppSepTableSearchLetter
@@ -422,4 +465,12 @@ onMounted(async () => {
v-model:open="openHistory"
:histories="histories"
/>
<AppViewLetter
v-model:open="openLetter"
:letters="letters"
:selected="selectedLetter"
:pagination-meta="paginationMeta"
@fetch="(value) => getLetterMappers(value.admissionType, value.search)"
@save="handleSaveLetter"
/>
</template>