fix: change integrate material

This commit is contained in:
riefive
2025-09-24 16:37:03 +07:00
parent fcabbc25ff
commit 93a5abba36
4 changed files with 52 additions and 38 deletions
+10 -1
View File
@@ -14,6 +14,7 @@ import Label from '~/components/pub/custom-ui/doc-entry/label.vue'
interface Props {
schema: z.ZodSchema<any>
uoms: any[]
values: any
}
const isLoading = ref(false)
@@ -23,7 +24,7 @@ const emit = defineEmits<{
cancel: [resetForm: () => void]
}>()
const { handleSubmit, defineField, errors, meta } = useForm({
const { defineField, errors, meta } = useForm({
validationSchema: toTypedSchema(props.schema),
initialValues: {
code: '',
@@ -38,6 +39,14 @@ const [name, nameAttrs] = defineField('name')
const [uom, uomAttrs] = defineField('uom_code')
const [stock, stockAttrs] = defineField('stock')
// Fill fields from props.values if provided
if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name
if (props.values.uom_code !== undefined) uom.value = props.values.uom_code
if (props.values.stock !== undefined) stock.value = props.values.stock
}
const resetForm = () => {
code.value = ''
name.value = ''
+22 -5
View File
@@ -21,6 +21,7 @@ import {
handleActionSave,
handleActionRemove,
handleCancelForm,
handleActionEdit,
} from '~/handlers/material.handler'
// Services
@@ -32,7 +33,8 @@ const uoms = ref<{ value: string; label: string }[]>([])
const getEquipmentDetail = async (id: number | string) => {
const result = await getSourceMaterialDetail(id)
if (result.success) {
recItem.value = result.data
const currentMaterial = result.body?.data || {}
recItem.value = currentMaterial
isFormEntryDialogOpen.value = true
}
}
@@ -40,7 +42,8 @@ const getEquipmentDetail = async (id: number | string) => {
const getUomList = async () => {
const result = await getSourceUoms()
if (result.success) {
uoms.value = result.data.map((uom: Uom) => ({ value: uom.code || uom.erp_id, label: uom.name }))
const currentUoms = result.body?.data || []
uoms.value = currentUoms.map((uom: Uom) => ({ value: uom.code || uom.erp_id, label: uom.name }))
}
}
@@ -55,7 +58,7 @@ const {
} = usePaginatedList({
fetchFn: async ({ page }) => {
const result = await getSourceMaterials({ page })
return { success: result.success || false, body: { data: result.data || [], meta: result.meta || {} } }
return { success: result.success || false, body: result.body || {} }
},
entityName: 'equipment',
})
@@ -117,12 +120,26 @@ onMounted(async () => {
<AppEquipmentList :data="data" :pagination-meta="paginationMeta" @page-change="handlePageChange" />
</div>
<Dialog v-model:open="isFormEntryDialogOpen" title="Tambah Perlengkapan" size="lg" prevent-outside>
<Dialog
v-model:open="isFormEntryDialogOpen"
:title="!!recItem ? 'Edit Perlengkapan' : 'Tambah Perlengkapan'"
size="lg"
prevent-outside
>
<AppEquipmentEntryForm
:schema="MaterialSchema"
:values="recItem"
:uoms="uoms"
:is-loading="isProcessing"
@submit="(values: MaterialFormData, resetForm: any) => handleActionSave(values, getEquipmentList, resetForm)"
@submit="
(values: MaterialFormData, resetForm: any) => {
if (!!recId) {
handleActionEdit(recId, values, getEquipmentList, resetForm)
return
}
handleActionSave(values, getEquipmentList, resetForm)
}
"
@cancel="handleCancelForm"
/>
</Dialog>
+19 -29
View File
@@ -2,38 +2,34 @@ import { xfetch } from '~/composables/useXfetch'
export async function getSourceMaterials(params: any = null) {
try {
let url = '/api/v1/material';
let url = '/api/v1/material'
if (params && typeof params === 'object' && Object.keys(params).length > 0) {
const searchParams = new URLSearchParams();
const searchParams = new URLSearchParams()
for (const key in params) {
if (params[key] !== null && params[key] !== undefined && params[key] !== '') {
searchParams.append(key, params[key]);
searchParams.append(key, params[key])
}
}
const queryString = searchParams.toString();
if (queryString) url += `?${queryString}`;
const queryString = searchParams.toString()
if (queryString) url += `?${queryString}`
}
const resp = await xfetch(url, 'GET');
const result: any = {};
result.success = resp.success;
if (resp.success) {
result.data = (resp.body as Record<string, any>).data;
}
return result;
const resp = await xfetch(url, 'GET')
const result: any = {}
result.success = resp.success
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error fetching source materials:', error);
throw new Error('Failed to fetch source materials');
console.error('Error fetching source materials:', error)
throw new Error('Failed to fetch source materials')
}
}
export async function getSourceMaterialDetail(id: number | string) {
try {
const resp = await xfetch(`/api/v1/material/${id}`, 'GET');
const resp = await xfetch(`/api/v1/material/${id}`, 'GET')
const result: any = {}
result.success = resp.success
if (resp.success) {
result.data = (resp.body as Record<string, any>).data
}
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error fetching source material detail:', error)
@@ -43,12 +39,10 @@ export async function getSourceMaterialDetail(id: number | string) {
export async function postSourceMaterial(record: any) {
try {
const resp = await xfetch('/api/v1/material', 'POST', record);
const resp = await xfetch('/api/v1/material', 'POST', record)
const result: any = {}
result.success = resp.success
if (resp.success) {
result.data = (resp.body as Record<string, any>).data
}
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error posting source material:', error)
@@ -58,12 +52,10 @@ export async function postSourceMaterial(record: any) {
export async function putSourceMaterial(id: number | string, record: any) {
try {
const resp = await xfetch(`/api/v1/material/${id}`, 'PUT', record);
const resp = await xfetch(`/api/v1/material/${id}`, 'PUT', record)
const result: any = {}
result.success = resp.success
if (resp.success) {
result.data = (resp.body as Record<string, any>).data
}
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error putting source material:', error)
@@ -76,9 +68,7 @@ export async function removeSourceMaterial(id: number | string) {
const resp = await xfetch(`/api/v1/material/${id}`, 'DELETE')
const result: any = {}
result.success = resp.success
if (resp.success) {
result.data = (resp.body as Record<string, any>).data
}
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error deleting record:', error)
+1 -3
View File
@@ -16,9 +16,7 @@ export async function getSourceUoms(params: any = null) {
const resp = await xfetch(url, 'GET')
const result: any = {}
result.success = resp.success
if (resp.success) {
result.data = (resp.body as Record<string, any>).data
}
result.body = (resp.body as Record<string, any>) || {}
return result
} catch (error) {
console.error('Error fetching source uoms:', error)