From 59847dce34b9cb230cdfe19151a2f7f31760282c Mon Sep 17 00:00:00 2001 From: riefive Date: Wed, 1 Oct 2025 13:01:24 +0700 Subject: [PATCH] chore: add shared handlers --- app/components/content/equipment/list.vue | 11 +-- app/components/content/installation/list.vue | 7 +- app/components/content/tools/list.vue | 12 +-- app/handlers/_shared.handler.ts | 26 ++++++ .../(features)/org-src/installation/index.vue | 4 +- app/services/encounter.service.ts | 79 +++++++++++++++++++ 6 files changed, 110 insertions(+), 29 deletions(-) create mode 100644 app/handlers/_shared.handler.ts create mode 100644 app/services/encounter.service.ts diff --git a/app/components/content/equipment/list.vue b/app/components/content/equipment/list.vue index b1b348d1..61757da7 100644 --- a/app/components/content/equipment/list.vue +++ b/app/components/content/equipment/list.vue @@ -29,12 +29,11 @@ import { handleActionRemove, handleCancelForm, } from '~/handlers/material.handler' +import { uoms, getUomList } from "~/handlers/_shared.handler" // Services import { getMaterials, getMaterialDetail } from '~/services/material.service' -import { getUoms } from '~/services/uom.service' -const uoms = ref<{ value: string; label: string }[]>([]) const title = ref('') const { @@ -93,14 +92,6 @@ const getCurrentMaterialDetail = async (id: number | string) => { } } -const getUomList = async () => { - const result = await getUoms() - if (result.success) { - const currentUoms = result.body?.data || [] - uoms.value = currentUoms.map((uom: Uom) => ({ value: uom.code || uom.erp_id, label: uom.name })) - } -} - // Watch for row actions when recId or recAction changes watch([recId, recAction], () => { switch (recAction.value) { diff --git a/app/components/content/installation/list.vue b/app/components/content/installation/list.vue index d70db2f4..ef580cf8 100644 --- a/app/components/content/installation/list.vue +++ b/app/components/content/installation/list.vue @@ -124,12 +124,7 @@ onMounted(async () => { /> - + ([]) const title = ref('') const { @@ -96,14 +94,6 @@ const getCurrentToolsDetail = async (id: number | string) => { } } -const getUomList = async () => { - const result = await getUoms() - if (result.success) { - const currentUoms = result.body?.data || [] - uoms.value = currentUoms.map((uom: Uom) => ({ value: uom.code || uom.erp_id, label: uom.name })) - } -} - // Watch for row actions watch([recId, recAction], () => { switch (recAction.value) { diff --git a/app/handlers/_shared.handler.ts b/app/handlers/_shared.handler.ts new file mode 100644 index 00000000..0e421d0f --- /dev/null +++ b/app/handlers/_shared.handler.ts @@ -0,0 +1,26 @@ +// types +import type { Uom } from '~/models/uom' + +// services +import { getUoms } from '~/services/uom.service' +import { getEncounters } from '~/services/encounter.service' + +// variables +export const uoms = ref<{ value: string; label: string }[]>([]) +export const encounterClasses = ref<{ value: string; label: string }[]>([]) + +export const getUomList = async () => { + const result = await getUoms() + if (result.success) { + const currentUoms = result.body?.data || [] + uoms.value = currentUoms.map((uom: Uom) => ({ value: uom.code || uom.erp_id, label: uom.name })) + } +} + +export const getEncounterClassList = async () => { + const result = await getEncounters() + if (result.success) { + const currentValues = result.body?.data || [] + encounterClasses.value = currentValues.map((item: any) => ({ value: item.code || item.id, label: item.name })) + } +} diff --git a/app/pages/(features)/org-src/installation/index.vue b/app/pages/(features)/org-src/installation/index.vue index d8b934da..7b39e66b 100644 --- a/app/pages/(features)/org-src/installation/index.vue +++ b/app/pages/(features)/org-src/installation/index.vue @@ -6,8 +6,8 @@ import Error from '~/components/pub/base/error/error.vue' definePageMeta({ // middleware: ['rbac'], roles: ['doctor', 'nurse', 'admisi', 'pharmacy', 'billing', 'management'], - title: 'List Installation', - contentFrame: 'cf-full-width', + title: 'Daftar Instalasi', + contentFrame: 'cf-container-lg', }) const route = useRoute() diff --git a/app/services/encounter.service.ts b/app/services/encounter.service.ts new file mode 100644 index 00000000..51f0b060 --- /dev/null +++ b/app/services/encounter.service.ts @@ -0,0 +1,79 @@ +import { xfetch } from '~/composables/useXfetch' + +const mainUrl = '/api/v1/encounter' + +export async function getEncounters(params: any = null) { + try { + let url = mainUrl + if (params && typeof params === 'object' && Object.keys(params).length > 0) { + const searchParams = new URLSearchParams() + for (const key in params) { + if (params[key] !== null && params[key] !== undefined && params[key] !== '') { + searchParams.append(key, params[key]) + } + } + const queryString = searchParams.toString() + if (queryString) url += `?${queryString}` + } + const resp = await xfetch(url, 'GET') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error fetching encounters:', error) + throw new Error('Failed to fetch encounters') + } +} + +export async function getEncounterDetail(id: string | number) { + try { + const resp = await xfetch(`${mainUrl}/${id}`, 'GET') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error fetching encounter detail:', error) + throw new Error('Failed to fetch encounter detail') + } +} + +export async function postEncounter(data: any) { + try { + const resp = await xfetch(mainUrl, 'POST', data) + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error creating encounter:', error) + throw new Error('Failed to create encounter') + } +} + +export async function patchEncounter(id: string | number, data: any) { + try { + const resp = await xfetch(`${mainUrl}/${id}`, 'PATCH', data) + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error updating encounter:', error) + throw new Error('Failed to update encounter') + } +} + +export async function removeEncounter(id: string | number) { + try { + const resp = await xfetch(`${mainUrl}/${id}`, 'DELETE') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error deleting encounter:', error) + throw new Error('Failed to delete encounter') + } +}