From 331f4a6b20194964d89eb1ada2d7661d8be8f76d Mon Sep 17 00:00:00 2001 From: hasyim_kai Date: Tue, 4 Nov 2025 16:56:08 +0700 Subject: [PATCH] Feat: Integrate Control Letter --- .../encounter/_common/select-date.vue | 1 - .../encounter/_common/select-dpjp.vue | 29 ++++- .../encounter/_common/select-speciality.vue | 91 ++++++++++++-- .../app/outpatient/encounter/entry-form.vue | 7 +- .../app/outpatient/encounter/list.cfg.ts | 61 +++------- .../content/outpatient/encounter/add.vue | 111 +++++++++--------- .../content/outpatient/encounter/detail.vue | 3 +- .../content/outpatient/encounter/edit.vue | 1 + .../content/outpatient/encounter/list.vue | 65 ++++------ app/handlers/control-letter.handler.ts | 24 ++++ app/models/control-letter.ts | 18 +++ .../encounter/[id]/control-letter/add.vue | 42 +++++++ app/schemas/control-letter.schema.ts | 15 ++- app/services/control-letter.service.ts | 28 +++++ app/services/doctor.service.ts | 42 +++++++ 15 files changed, 365 insertions(+), 173 deletions(-) create mode 100644 app/handlers/control-letter.handler.ts create mode 100644 app/models/control-letter.ts create mode 100644 app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue create mode 100644 app/services/control-letter.service.ts create mode 100644 app/services/doctor.service.ts diff --git a/app/components/app/outpatient/encounter/_common/select-date.vue b/app/components/app/outpatient/encounter/_common/select-date.vue index 5ab4ffc1..057d0a63 100644 --- a/app/components/app/outpatient/encounter/_common/select-date.vue +++ b/app/components/app/outpatient/encounter/_common/select-date.vue @@ -98,7 +98,6 @@ function calculateAge(birthDate: string | Date | undefined): string { id="birthDate" type="date" min="1900-01-01" - :max="new Date().toISOString().split('T')[0]" v-bind="componentField" :placeholder="placeholder" @update:model-value=" diff --git a/app/components/app/outpatient/encounter/_common/select-dpjp.vue b/app/components/app/outpatient/encounter/_common/select-dpjp.vue index 0852195b..393fe988 100644 --- a/app/components/app/outpatient/encounter/_common/select-dpjp.vue +++ b/app/components/app/outpatient/encounter/_common/select-dpjp.vue @@ -3,8 +3,10 @@ import type { FormErrors } from '~/types/error' import Combobox from '~/components/pub/my-ui/combobox/combobox.vue' import { cn, mapToComboboxOptList } from '~/lib/utils' import { occupationCodes } from '~/lib/constants' +import { getValueLabelList as getDoctorLabelList } from '~/services/doctor.service' import * as DE from '~/components/pub/my-ui/doc-entry' +import type { Item } from '~/components/pub/my-ui/combobox' const props = defineProps<{ fieldName?: string @@ -28,8 +30,28 @@ const { labelClass, } = props -// Generate job options from constants, sama seperti pola genderCodes -const jobOptions = mapToComboboxOptList(occupationCodes) +const doctors = ref>([]) + +async function fetchDpjp() { + doctors.value = await getDoctorLabelList({ + serviceType: 1, + serviceDate: new Date().toISOString().substring(0, 10), + specialistCode: 0, + includes: 'employee-person', + }) +} + +const selectedDpjpId = inject>("selectedDpjpId")! +function handleDpjpChange(selected: string) { + console.log(`change dphp`) + selectedDpjpId.value = selected ?? null + const dpjp = doctors.value.find(s => s.value === selectedDpjpId.value) + console.log(dpjp) +} + +onMounted(() => { + fetchDpjp() +})