diff --git a/app/components/app/device-order-item/entry-form.vue b/app/components/app/device-order-item/entry-form.vue new file mode 100644 index 00000000..3ae2d200 --- /dev/null +++ b/app/components/app/device-order-item/entry-form.vue @@ -0,0 +1,73 @@ + + + \ No newline at end of file diff --git a/app/components/app/device-order-item/list-entry.config.ts b/app/components/app/device-order-item/list-entry.config.ts index f2f3ef86..d47c4368 100644 --- a/app/components/app/device-order-item/list-entry.config.ts +++ b/app/components/app/device-order-item/list-entry.config.ts @@ -1,36 +1,35 @@ import { defineAsyncComponent } from 'vue' -import type { Config } from '~/components/pub/my-ui/data-table' - +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) export const config: Config = { - cols: [{}, {}, { width: 50 }], + cols: [{}, { width: 200 }, { width: 100 }], headers: [[{ label: 'Nama' }, { label: 'Jumlah' }, { label: '' }]], - keys: ['name', 'count', 'action'], + keys: ['device.name', 'quantity', 'action'], delKeyNames: [ { key: 'name', label: 'Nama' }, { key: 'count', label: 'Jumlah' }, ], - skeletonSize: 10 + skeletonSize: 10, // funcParsed: { // parent: (rec: unknown): unknown => { // const recX = rec as SmallDetailDto // return recX.parent?.name || '-' // }, // }, - // funcComponent: { - // action(rec: object, idx: any) { - // const res: RecComponent = { - // idx, - // rec: rec as object, - // component: action, - // props: { - // size: 'sm', - // }, - // } - // return res - // }, - // } + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res + }, + } } diff --git a/app/components/app/device-order-item/list-entry.vue b/app/components/app/device-order-item/list-entry.vue index 26f6691d..b6031228 100644 --- a/app/components/app/device-order-item/list-entry.vue +++ b/app/components/app/device-order-item/list-entry.vue @@ -1,13 +1,23 @@ diff --git a/app/components/app/device-order/confirmation-info.vue b/app/components/app/device-order/confirmation-info.vue new file mode 100644 index 00000000..6711091f --- /dev/null +++ b/app/components/app/device-order/confirmation-info.vue @@ -0,0 +1,26 @@ + + \ No newline at end of file diff --git a/app/components/app/device-order/entry-form.vue b/app/components/app/device-order/entry-form.vue index bea2b6eb..4e66c441 100644 --- a/app/components/app/device-order/entry-form.vue +++ b/app/components/app/device-order/entry-form.vue @@ -1,6 +1,25 @@ diff --git a/app/components/app/device-order/list.config.ts b/app/components/app/device-order/list.config.ts index 7580c576..04a6c9fc 100644 --- a/app/components/app/device-order/list.config.ts +++ b/app/components/app/device-order/list.config.ts @@ -1,13 +1,18 @@ -import type { Config } from '~/components/pub/my-ui/data-table' +import type { Config, RecComponent } from '~/components/pub/my-ui/data-table' import type { DeviceOrder } from '~/models/device-order' -import { defineAsyncComponent } from 'vue' +import type { DeviceOrderItem } from '~/models/device-order-item' -const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dsd.vue')) export const config: Config = { - cols: [{ width: 120 }, { }, { }, { width: 50 }], - headers: [[{ label: 'Tanggal' }, { label: 'DPJP' }, { label: 'Alat Kesehatan' }, { label: '' }]], - keys: ['createdAt', 'encounter.doctor.person.name', 'items', 'action'], + cols: [{ width: 120 }, { }, { }, { }, { width: 50 }], + headers: [[ + { label: 'Tanggal' }, + { label: 'DPJP' }, + { label: 'Alat Kesehatan' }, + { label: 'Status' }, + { label: '' }]], + keys: ['createdAt', 'doctor.employee.person.name', 'items', 'status_code', 'action'], delKeyNames: [ { key: 'code', label: 'Kode' }, { key: 'name', label: 'Nama' }, @@ -16,27 +21,45 @@ export const config: Config = { htmls: { items: (rec: unknown): unknown => { const recX = rec as DeviceOrder - return recX.items?.length || 0 + if (recX.items?.length > 0) { + let output = '' + recX.items.forEach((item: DeviceOrderItem) => { + output += '' + + ''+ + `` + + '' + + `` + + '' + }) + output += '
${item.device?.name}:${item.quantity}
' + return output + } else { + return '-' + } + }, + }, + parses: { + createdAt: (rec: unknown): unknown => { + const recX = rec as DeviceOrder + return recX.createdAt ? new Date(recX.createdAt).toLocaleDateString() : '-' + }, + // parent: (rec: unknown): unknown => { + // const recX = rec as SmallDetailDto + // return recX.parent?.name || '-' + // }, + }, + components: { + action(rec, idx) { + const res: RecComponent = { + idx, + rec: rec as object, + component: action, + props: { + size: 'sm', + }, + } + return res }, } - // funcParsed: { - // parent: (rec: unknown): unknown => { - // const recX = rec as SmallDetailDto - // return recX.parent?.name || '-' - // }, - // }, - // funcComponent: { - // action(rec: object, idx: any) { - // const res: RecComponent = { - // idx, - // rec: rec as object, - // component: action, - // props: { - // size: 'sm', - // }, - // } - // return res - // }, - // } } diff --git a/app/components/app/device-order/list.vue b/app/components/app/device-order/list.vue index 37b24ea3..83f57dd6 100644 --- a/app/components/app/device-order/list.vue +++ b/app/components/app/device-order/list.vue @@ -8,12 +8,10 @@ import type { PaginationMeta } from '~/components/pub/my-ui/pagination/paginatio // Configs import { config } from './list.config' -interface Props { +defineProps<{ data: any[] paginationMeta: PaginationMeta -} - -defineProps() +}>() const emit = defineEmits<{ pageChange: [page: number] @@ -28,7 +26,7 @@ function handlePageChange(page: number) {
diff --git a/app/components/content/device-order/entry.vue b/app/components/content/device-order/entry.vue index 6d76d685..5d87d960 100644 --- a/app/components/content/device-order/entry.vue +++ b/app/components/content/device-order/entry.vue @@ -1,24 +1,177 @@ diff --git a/app/components/content/device-order/list.vue b/app/components/content/device-order/list.vue index e62a2fbd..1ffa324d 100644 --- a/app/components/content/device-order/list.vue +++ b/app/components/content/device-order/list.vue @@ -1,69 +1,39 @@ diff --git a/app/components/content/device-order/main.vue b/app/components/content/device-order/main.vue index ae5a9ca8..ff8722de 100644 --- a/app/components/content/device-order/main.vue +++ b/app/components/content/device-order/main.vue @@ -3,10 +3,14 @@ import List from './list.vue' import Entry from './entry.vue' -const { mode } = useQueryMode() +defineProps<{ + encounter_id: number +}>() + +const { mode } = useQueryCRUDMode() diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index 75007681..a6bd32dd 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -16,6 +16,7 @@ import Status from '~/components/content/encounter/status.vue' import AssesmentFunctionList from '~/components/content/soapi/entry.vue' import EarlyMedicalAssesmentList from '~/components/content/soapi/entry.vue' import EarlyMedicalRehabList from '~/components/content/soapi/entry.vue' +import DeviceOrder from '~/components/content/device-order/main.vue' import Prescription from '~/components/content/prescription/main.vue' import CpLabOrder from '~/components/content/cp-lab-order/main.vue' import Radiology from '~/components/content/radiology-order/main.vue' @@ -75,7 +76,7 @@ const tabs: TabItem[] = [ { value: 'consent', label: 'General Consent', component: GeneralConsentList, props: { encounter: data } }, { value: 'patient-note', label: 'CPRJ' }, { value: 'prescription', label: 'Order Obat', component: Prescription, props: { encounter_id: data.value.id } }, - { value: 'device', label: 'Order Alkes' }, + { value: 'device-order', label: 'Order Alkes', component: DeviceOrder, props: { encounter_id: data.value.id } }, { value: 'mcu-radiology', label: 'Order Radiologi', component: Radiology, props: { encounter_id: data.value.id } }, { value: 'mcu-lab-cp', label: 'Order Lab PK', component: CpLabOrder, props: { encounter_id: data.value.id } }, { value: 'mcu-lab-micro', label: 'Order Lab Mikro' }, diff --git a/app/handlers/device-order.handler.ts b/app/handlers/device-order.handler.ts index b1df996b..ab6f8fb5 100644 --- a/app/handlers/device-order.handler.ts +++ b/app/handlers/device-order.handler.ts @@ -1,8 +1,9 @@ // Handlers import { genCrudHandler } from '~/handlers/_handler' +import type { DeviceOrder } from '~/models/device-order' // Services -import { create, update, remove } from '~/services/device-order-item.service' +import { create, update, remove } from '~/services/device-order.service' export const { recId, @@ -17,7 +18,7 @@ export const { handleActionEdit, handleActionRemove, handleCancelForm, -} = genCrudHandler({ +} = genCrudHandler({ create, update, remove, diff --git a/app/models/device-order-item.ts b/app/models/device-order-item.ts index fa16638a..31b3ee47 100644 --- a/app/models/device-order-item.ts +++ b/app/models/device-order-item.ts @@ -1,16 +1,19 @@ import { type Base, genBase } from "./_base" +import { genDevice, type Device } from "./device" export interface DeviceOrderItem extends Base { deviceOrder_id: number - device_id: number - count: number + device_code: string + device: Device + quantity: number } export function genDeviceOrderItem(): DeviceOrderItem { return { ...genBase(), deviceOrder_id: 0, - device_id: 0, - count: 0, + device_code: '', + device: genDevice(), + quantity: 0, } } diff --git a/app/models/device-order.ts b/app/models/device-order.ts index 884340c5..cbb682ad 100644 --- a/app/models/device-order.ts +++ b/app/models/device-order.ts @@ -1,15 +1,21 @@ import { type Base, genBase } from "./_base" +import type { DeviceOrderItem } from "./device-order-item" +import { genDoctor, type Doctor } from "./doctor" export interface DeviceOrder extends Base { encounter_id: number - doctor_id: number + doctor_code: number + doctor: Doctor status_code?: string + items: DeviceOrderItem[] } export function genDeviceOrder(): DeviceOrder { return { ...genBase(), encounter_id: 0, - doctor_id: 0, + doctor_code: 0, + doctor: genDoctor(), + items: [] } } diff --git a/app/services/device-order-item.service.ts b/app/services/device-order-item.service.ts index 33b92b8c..b2eab0f4 100644 --- a/app/services/device-order-item.service.ts +++ b/app/services/device-order-item.service.ts @@ -5,7 +5,6 @@ const path = '/api/v1/device-order-item' const name = 'device-order-item' export function create(data: any) { - console.log('service create', data) return base.create(path, data, name) } diff --git a/app/services/device-order.service.ts b/app/services/device-order.service.ts index b8d5372c..cf70420d 100644 --- a/app/services/device-order.service.ts +++ b/app/services/device-order.service.ts @@ -13,8 +13,8 @@ export function getList(params: any = null) { return base.getList(path, params, name) } -export function getDetail(id: number | string) { - return base.getDetail(path, id, name) +export function getDetail(id: number | string, params?: any) { + return base.getDetail(path, id, name, params) } export function update(id: number | string, data: any) { @@ -24,3 +24,16 @@ export function update(id: number | string, data: any) { export function remove(id: number | string) { return base.remove(path, id, name) } + +export async function submit(id: number) { + try { + const resp = await xfetch(`${path}/${id}/submit`, 'PATCH') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error(`Error putting ${name}:`, error) + throw new Error(`Failed to put ${name}`) + } +} \ No newline at end of file