Compare commits

..

2 Commits

Author SHA1 Message Date
Yoga Pangestu
dba24938d5 feat: move cutting share route to admin management path
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (8.3) (push) Waiting to run
tests / ci (8.4) (push) Waiting to run
tests / ci (8.5) (push) Waiting to run
2026-07-05 21:21:41 +07:00
Yoga Pangestu
052a896c8f feat: add numerical indexing to cutting material and result groups in tables 2026-07-05 21:21:28 +07:00
5 changed files with 41 additions and 36 deletions

View File

@ -168,7 +168,7 @@ const groupedResults = computed<GroupedResults[]>(() => {
</TableHeader>
<TableBody>
<template
v-for="group in groupedResults"
v-for="(group, groupIndex) in groupedResults"
:key="group.key"
>
<TableRow
@ -178,7 +178,7 @@ const groupedResults = computed<GroupedResults[]>(() => {
colspan="5"
class="font-semibold"
>
{{ group.name }}
{{ groupIndex + 1 }}. {{ group.name }}
</TableCell>
</TableRow>
<TableRow
@ -239,7 +239,7 @@ const groupedResults = computed<GroupedResults[]>(() => {
</TableHeader>
<TableBody>
<template
v-for="group in groupedMaterials"
v-for="(group, groupIndex) in groupedMaterials"
:key="group.key"
>
<TableRow
@ -250,7 +250,7 @@ const groupedResults = computed<GroupedResults[]>(() => {
class="font-semibold"
>
<template v-if="group.isCombination">
<span class="text-primary">{{ group.name }}</span>
<span class="text-primary">{{ groupIndex + 1 }}. {{ group.name }}</span>
<Badge
variant="default"
class="ml-2 font-normal"
@ -266,7 +266,7 @@ const groupedResults = computed<GroupedResults[]>(() => {
</Badge>
</template>
<template v-else>
{{ group.name }}
{{ groupIndex + 1 }}. {{ group.name }}
<Badge
v-if="group.unitLabel"
variant="secondary"

View File

@ -130,7 +130,7 @@ const totalCompleted = computed(() => props.cuttings.length);
<template v-if="cutting.materials.length">
<div v-for="(group, gi) in getMaterialGroups(cutting.materials)" :key="gi" class="mt-1">
<div v-if="group.type === 'combination'" class="mb-1">
<span class="text-primary font-medium text-[11px]">{{ group.name }} ({{ group.items.length }} bahan)</span>
<span class="text-primary font-medium text-[11px]">{{ gi + 1 }}. {{ group.name }} ({{ group.items.length }} bahan)</span>
<span v-if="group.items[0]?.combination_material_result !== null && group.items[0]?.combination_material_result !== undefined" class="text-primary font-medium text-[11px] ml-1">
- Hasil: {{ group.items[0].combination_material_result }} pcs
</span>
@ -140,14 +140,17 @@ const totalCompleted = computed(() => props.cuttings.length);
</li>
</ul>
</div>
<ul v-else class="list-disc pl-4 space-y-0.5 text-muted-foreground">
<li v-for="mat in group.items" :key="mat.id">
{{ mat.raw_material_name }} ({{ mat.variant }}) - {{ formatMaterialUsage(mat) }} {{ getMaterialUnit(mat) }}
<template v-if="mat.material_result !== null && mat.material_result !== undefined">
{{ mat.material_result }} pcs
</template>
</li>
</ul>
<div v-else>
<span class="font-medium text-[11px]">{{ gi + 1 }}. {{ group.items[0]?.raw_material_name }}</span>
<ul class="list-disc pl-4 space-y-0.5 text-muted-foreground">
<li v-for="mat in group.items" :key="mat.id">
{{ mat.variant }} - {{ formatMaterialUsage(mat) }} {{ getMaterialUnit(mat) }}
<template v-if="mat.material_result !== null && mat.material_result !== undefined">
{{ mat.material_result }} pcs
</template>
</li>
</ul>
</div>
</div>
</template>
<ul v-else class="list-disc pl-4 space-y-0.5 text-muted-foreground">

View File

@ -235,13 +235,13 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
Belum ada bahan baku
</TableCell>
</TableRow>
<template v-else v-for="group in getGroupedMaterials(
<template v-else v-for="(group, groupIndex) in getGroupedMaterials(
cutting.materials,
)" :key="group.rawMaterialId">
<TableRow class="bg-muted/20 hover:bg-muted/20">
<TableCell colspan="4" class="font-semibold text-foreground">
<template v-if="group.isCombination">
<span class="text-primary">{{ group.rawMaterialName }}</span>
<span class="text-primary">{{ groupIndex + 1 }}. {{ group.rawMaterialName }}</span>
<Badge variant="default" class="ml-2 font-normal">
{{ group.items.length }} bahan
</Badge>
@ -252,7 +252,7 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
</Badge>
</template>
<template v-else>
{{ group.rawMaterialName }}
{{ groupIndex + 1 }}. {{ group.rawMaterialName }}
<Badge v-if="group.unitLabel" variant="secondary"
class="ml-2 font-normal">
{{ group.unitLabel }}
@ -260,9 +260,9 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
</template>
</TableCell>
</TableRow>
<TableRow v-for="(material, index) in group.items" :key="material.id">
<TableRow v-for="material in group.items" :key="material.id">
<TableCell class="pl-6 font-medium">
{{ index + 1 }}. {{ material.variant }}
{{ material.variant }}
</TableCell>
<TableCell>
<MediaThumbnailCell :items="material.images ?? []
@ -310,19 +310,17 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] {
Belum ada hasil produk
</TableCell>
</TableRow>
<template v-else v-for="group in getGroupedResults(
<template v-else v-for="(group, groupIndex) in getGroupedResults(
cutting.results,
)" :key="group.productId">
<TableRow class="bg-muted/20 hover:bg-muted/20">
<TableCell colspan="5" class="font-semibold text-foreground">
{{ group.productName }}
{{ groupIndex + 1 }}. {{ group.productName }}
</TableCell>
</TableRow>
<TableRow v-for="(result, index) in group.items" :key="result.id">
<TableRow v-for="result in group.items" :key="result.id">
<TableCell class="pl-6 font-medium">
{{ index + 1 }}. {{
result.product_variant?.name
}}
{{ result.product_variant?.name }}
</TableCell>
<TableCell>
<MediaThumbnailCell :items="result.product_variant

View File

@ -102,7 +102,7 @@ defineProps<{
<template v-if="cutting.materials.length">
<div v-for="(group, gi) in getMaterialGroups(cutting.materials)" :key="gi" class="mt-1">
<div v-if="group.type === 'combination'" class="mb-1">
<span class="text-primary font-medium text-[11px]">{{ group.name }} ({{ group.items.length }} bahan)</span>
<span class="text-primary font-medium text-[11px]">{{ gi + 1 }}. {{ group.name }} ({{ group.items.length }} bahan)</span>
<span v-if="group.items[0]?.combination_material_result !== null && group.items[0]?.combination_material_result !== undefined" class="text-primary font-medium text-[11px] ml-1">
- Hasil: {{ group.items[0].combination_material_result }} pcs
</span>
@ -112,14 +112,17 @@ defineProps<{
</li>
</ul>
</div>
<ul v-else class="list-disc pl-4 space-y-0.5 text-muted-foreground">
<li v-for="mat in group.items" :key="mat.id">
{{ mat.raw_material_name }} ({{ mat.variant }}) - {{ formatMaterialUsage(mat) }} {{ getMaterialUnit(mat) }}
<template v-if="mat.material_result !== null && mat.material_result !== undefined">
{{ mat.material_result }} pcs
</template>
</li>
</ul>
<div v-else>
<span class="font-medium text-[11px]">{{ gi + 1 }}. {{ group.items[0]?.raw_material_name }}</span>
<ul class="list-disc pl-4 space-y-0.5 text-muted-foreground">
<li v-for="mat in group.items" :key="mat.id">
{{ mat.variant }} - {{ formatMaterialUsage(mat) }} {{ getMaterialUnit(mat) }}
<template v-if="mat.material_result !== null && mat.material_result !== undefined">
{{ mat.material_result }} pcs
</template>
</li>
</ul>
</div>
</div>
</template>
<ul v-else class="list-disc pl-4 space-y-0.5 text-muted-foreground">

View File

@ -47,6 +47,9 @@
Route::post('/auth/login', [LoginController::class, 'store']);
});
Route::get('/admin/manage/cuttings/{cutting}/share', [CuttingController::class, 'share'])
->name('admin.manage.cuttings.share');
Route::middleware(['auth', 'permission:'.Permission::DASHBOARD_VIEW->value])->group(function () {
Route::post('/auth/logout', [LogoutController::class, 'store'])->name('logout');
@ -335,8 +338,6 @@
->middleware('permission:'.Permission::CUTTINGS_COMPLETE->value.'|'.Permission::CUTTINGS_VERIFY->value.'|'.Permission::CUTTINGS_REJECT->value)
->name('transition_status');
Route::get('{cutting}/share', [CuttingController::class, 'share'])
->name('share');
Route::post('draft-materials', [CuttingDraftItemController::class, 'storeMaterial'])
->middleware('permission:'.Permission::CUTTINGS_CREATE->value)