From 4444e87cb3db639bc3631c2761ab7705459336c5 Mon Sep 17 00:00:00 2001 From: Andrian Roshandy Date: Wed, 3 Dec 2025 09:42:31 +0700 Subject: [PATCH] feat/procedure-room-order: wip #1 + material-package + material-package-item --- .../material-package-item/quick-list.cfg.ts | 23 +++++++++++ .../app/material-package-item/quick-list.vue | 23 +++++++++++ .../app/material-package/switcher.vue | 23 +++++++++++ app/models/material-package-item.ts | 14 +++++++ app/models/material-package.ts | 14 +++++++ app/schemas/material-package-item.schema.ts | 12 ++++++ app/schemas/material-package.schema.ts | 12 ++++++ app/services/material-package-item.service.ts | 25 ++++++++++++ app/services/material-package.service.ts | 38 +++++++++++++++++++ 9 files changed, 184 insertions(+) create mode 100644 app/components/app/material-package-item/quick-list.cfg.ts create mode 100644 app/components/app/material-package-item/quick-list.vue create mode 100644 app/components/app/material-package/switcher.vue create mode 100644 app/models/material-package-item.ts create mode 100644 app/models/material-package.ts create mode 100644 app/schemas/material-package-item.schema.ts create mode 100644 app/schemas/material-package.schema.ts create mode 100644 app/services/material-package-item.service.ts create mode 100644 app/services/material-package.service.ts diff --git a/app/components/app/material-package-item/quick-list.cfg.ts b/app/components/app/material-package-item/quick-list.cfg.ts new file mode 100644 index 00000000..90caf510 --- /dev/null +++ b/app/components/app/material-package-item/quick-list.cfg.ts @@ -0,0 +1,23 @@ +import type { Config } from '~/components/pub/my-ui/data-table' + +type SmallDetailDto = any + +export const config: Config = { + cols: [ { width: 150 }, {}, { width: 150 }], + + headers: [ + [ + { label: 'No' }, + { label: 'Name' }, + { label: 'Jumlah' }, + ], + ], + + keys: ['number', 'material.name', 'count'], + + parses: { + number: (rec: unknown): unknown => { + return (rec as SmallDetailDto).medicineGroup?.name || '-' + }, + }, +} diff --git a/app/components/app/material-package-item/quick-list.vue b/app/components/app/material-package-item/quick-list.vue new file mode 100644 index 00000000..e570db9f --- /dev/null +++ b/app/components/app/material-package-item/quick-list.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/components/app/material-package/switcher.vue b/app/components/app/material-package/switcher.vue new file mode 100644 index 00000000..0ec6912f --- /dev/null +++ b/app/components/app/material-package/switcher.vue @@ -0,0 +1,23 @@ + + + diff --git a/app/models/material-package-item.ts b/app/models/material-package-item.ts new file mode 100644 index 00000000..9ccde8d1 --- /dev/null +++ b/app/models/material-package-item.ts @@ -0,0 +1,14 @@ +import { type Base, genBase } from "./_base" + +export interface MaterialPackageItem extends Base { + materialPackage_code: string + material_code: string +} + +export function genMaterialPackage(): MaterialPackageItem { + return { + ...genBase(), + materialPackage_code: '', + material_code: '', + } +} diff --git a/app/models/material-package.ts b/app/models/material-package.ts new file mode 100644 index 00000000..df3f01d1 --- /dev/null +++ b/app/models/material-package.ts @@ -0,0 +1,14 @@ +import { type Base, genBase } from "./_base" + +export interface MaterialPackage extends Base { + code: string + name: string +} + +export function genMaterialPackage(): MaterialPackage { + return { + ...genBase(), + code: '', + name: '', + } +} diff --git a/app/schemas/material-package-item.schema.ts b/app/schemas/material-package-item.schema.ts new file mode 100644 index 00000000..e893aa5b --- /dev/null +++ b/app/schemas/material-package-item.schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod' +import type { MaterialPackageItem } from '~/models/material-package-item' + +const MaterialSchema = z.object({ + materialPackage_code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), + material_code: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), +}) + +type MaterialFormData = z.infer & Partial + +export { MaterialSchema } +export type { MaterialFormData } diff --git a/app/schemas/material-package.schema.ts b/app/schemas/material-package.schema.ts new file mode 100644 index 00000000..38220f7b --- /dev/null +++ b/app/schemas/material-package.schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod' +import type { MaterialPackage } from '~/models/material-package' + +const MaterialSchema = z.object({ + code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), + name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), +}) + +type MaterialFormData = z.infer & Partial + +export { MaterialSchema } +export type { MaterialFormData } diff --git a/app/services/material-package-item.service.ts b/app/services/material-package-item.service.ts new file mode 100644 index 00000000..00059356 --- /dev/null +++ b/app/services/material-package-item.service.ts @@ -0,0 +1,25 @@ +// Base +import * as base from './_crud-base' + +const name = 'material-package-item' +const path = `/api/v1/${name}` + +export function create(data: any) { + return base.create(path, data, name) +} + +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 update(id: number | string, data: any) { + return base.update(path, id, data, name) +} + +export function remove(id: number | string) { + return base.remove(path, id, name) +} diff --git a/app/services/material-package.service.ts b/app/services/material-package.service.ts new file mode 100644 index 00000000..36822045 --- /dev/null +++ b/app/services/material-package.service.ts @@ -0,0 +1,38 @@ +// Base +import type { MaterialPackage } from '~/models/material-package' +import * as base from './_crud-base' + +const name = 'material-package' +const path = `/api/v1/${name}` + +export function create(data: any) { + return base.create(path, data, name) +} + +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 update(id: number | string, data: any) { + return base.update(path, id, data, name) +} + +export function remove(id: number | string) { + return base.remove(path, id, name) +} + +export async function getValueLabelList(params: any = null, useId = false): Promise<{ value: string; label: string }[]> { + let data: { value: string; label: string }[] = [] + const result = await getList(params) + if (result.success) { + const resultData = result.body?.data || [] + data = !useId ? + resultData.map((item: MaterialPackage) => ({ value: item.code, label: item.name })) : + resultData.map((item: MaterialPackage) => ({ value: item.id, label: item.name })) + } + return data +}