feat(division): create handler for division position

This commit is contained in:
riefive
2025-09-30 09:30:41 +07:00
parent 70a6e60769
commit 18eaef2e37
4 changed files with 116 additions and 16 deletions
+10 -16
View File
@@ -66,9 +66,15 @@ const headerPrep: HeaderPrep = {
minLength: 3,
debounceMs: 500,
showValidationFeedback: true,
onInput: (_val: string) => {},
onClick: () => {},
onClear: () => {},
onInput: (value: string) => {
searchInput.value = value
},
onClick: () => {
// open filter modal
},
onClear: () => {
// clear url param
},
},
addNav: {
label: 'Tambah',
@@ -82,18 +88,6 @@ const headerPrep: HeaderPrep = {
},
}
const refSearchNav: RefSearchNav = {
onClick: () => {
// open filter modal
},
onInput: (_val: string) => {
// filter patient list
},
onClear: () => {
// clear url param
},
}
provide('rec_id', recId)
provide('rec_action', recAction)
provide('rec_item', recItem)
@@ -169,7 +163,7 @@ onMounted(async () => {
v-model="searchInput"
:prep="headerPrep"
@search="handleSearch"
:ref-search-nav="refSearchNav"
:ref-search-nav="headerPrep.refSearchNav"
class="mb-4 xl:mb-5"
/>
<AppMedicineList :data="data" :pagination-meta="paginationMeta" @page-change="handlePageChange" />
+21
View File
@@ -0,0 +1,21 @@
import { createCrudHandler } from '~/handlers/_handler'
import { postDivisionPosition, patchDivisionPosition, removeDivisionPosition } from '~/services/division-position.service'
export const {
recId,
recAction,
recItem,
isReadonly,
isProcessing,
isFormEntryDialogOpen,
isRecordConfirmationOpen,
onResetState,
handleActionSave,
handleActionEdit,
handleActionRemove,
handleCancelForm,
} = createCrudHandler({
post: postDivisionPosition,
patch: patchDivisionPosition,
remove: removeDivisionPosition,
})
+6
View File
@@ -2,3 +2,9 @@ export interface Division {
code: string
name: string
}
export interface DivisionPosition {
code: string
name: string
division_id: number
}
+79
View File
@@ -0,0 +1,79 @@
import { xfetch } from '~/composables/useXfetch'
const mainUrl = '/api/v1/division-position'
export async function getDivisionPositions(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(mainUrl, 'GET')
const result: any = {}
result.success = resp.success
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error fetching division-positions:', error)
throw new Error('Failed to fetch division-positions')
}
}
export async function getDivisionPositionDetail(id: number | string) {
try {
const resp = await xfetch(`${mainUrl}/${id}`, 'GET')
const result: any = {}
result.success = resp.success
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error fetching division-position detail:', error)
throw new Error('Failed to get division-position detail')
}
}
export async function postDivisionPosition(record: any) {
try {
const resp = await xfetch(mainUrl, 'POST', record)
const result: any = {}
result.success = resp.success
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error posting division-position:', error)
throw new Error('Failed to post division-position')
}
}
export async function patchDivisionPosition(id: number | string, record: any) {
try {
const resp = await xfetch(`${mainUrl}/${id}`, 'PATCH', record)
const result: any = {}
result.success = resp.success
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error putting division-position:', error)
throw new Error('Failed to put division-position')
}
}
export async function removeDivisionPosition(id: number | string) {
try {
const resp = await xfetch(`${mainUrl}/${id}`, 'DELETE')
const result: any = {}
result.success = resp.success
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error deleting record:', error)
throw new Error('Failed to delete division-position')
}
}