diff --git a/resources/js/components/media/MediaPreviewDialog.vue b/resources/js/components/media/MediaPreviewDialog.vue index b784e49..449b98c 100644 --- a/resources/js/components/media/MediaPreviewDialog.vue +++ b/resources/js/components/media/MediaPreviewDialog.vue @@ -22,11 +22,13 @@ const props = withDefaults( urls?: string[]; title?: string; titles?: string[]; + stocks?: string[]; }>(), { urls: () => [], title: 'Pratinjau Foto', titles: () => [], + stocks: () => [], } ); @@ -74,6 +76,14 @@ const activeTitle = computed(() => { return props.title ?? 'Pratinjau Foto'; }); +const activeStock = computed(() => { + if (props.stocks && props.stocks.length > 0 && currentIndex.value >= 0) { + return props.stocks[currentIndex.value] ?? null; + } + + return null; +}); + function nextImage() { if (!hasMultiple.value) { return; @@ -142,6 +152,7 @@ function handleTouchEnd(e: TouchEvent) { {{ activeTitle }} +

{{ activeStock }}

(); const previewOpen = ref(false); @@ -121,5 +122,5 @@ function openGallery() { - + diff --git a/resources/js/pages/admin/manage/cuttings/Share.vue b/resources/js/pages/admin/manage/cuttings/Share.vue index 0d779c7..11316d3 100644 --- a/resources/js/pages/admin/manage/cuttings/Share.vue +++ b/resources/js/pages/admin/manage/cuttings/Share.vue @@ -195,6 +195,7 @@ const groupedResults = computed(() => { ?.images ?? [] " :max-visible="1" + :all-stocks="(result.product_variant?.images ?? []).map(() => `${result.cutting_result} pcs`)" /> (() => { (null); const previewTitle = ref(''); +const previewStock = ref(''); const allVariantImages = computed(() => { - const list: { priceId: number; title: string; url: string }[] = []; + const list: { priceId: number; title: string; stock: string; url: string }[] = []; props.filteredRawMaterials.forEach((rawMaterial) => { rawMaterial.prices.forEach((price) => { if (price.images && price.images.length > 0) { list.push({ priceId: price.id, title: `${rawMaterial.name} - ${price.variant}`, + stock: `Stok: ${price.stock_formatted}`, url: price.images[0].url, }); } @@ -64,6 +66,7 @@ function handleThumbClick(priceId: number) { if (idx !== -1) { previewUrl.value = allVariantImages.value[idx].url; previewTitle.value = allVariantImages.value[idx].title; + previewStock.value = allVariantImages.value[idx].stock; previewOpen.value = true; } } @@ -73,6 +76,7 @@ watch(previewUrl, (newUrl) => { if (matched) { previewTitle.value = matched.title; + previewStock.value = matched.stock; } }); @@ -206,5 +210,5 @@ function openCombination(rawMaterial: CuttingRawMaterialCatalogItem, price: Cutt :existing-cart-items="materialCart" :initial-variant="combinationInitialVariant" @combination-created="emit('combination-created', $event)" /> - + diff --git a/resources/js/pages/admin/manage/cuttings/form/CuttingPosMaterialSummaryItems.vue b/resources/js/pages/admin/manage/cuttings/form/CuttingPosMaterialSummaryItems.vue index 67167aa..c5c5bc0 100644 --- a/resources/js/pages/admin/manage/cuttings/form/CuttingPosMaterialSummaryItems.vue +++ b/resources/js/pages/admin/manage/cuttings/form/CuttingPosMaterialSummaryItems.vue @@ -138,6 +138,7 @@ function setCombinationResult(combinationId: number | undefined, value: string) v-if="item.images?.length" :items="item.images" :max-visible="1" + :all-stocks="item.images.map(() => `Stok: ${item.stock_input} ${item.unit_abbreviation}`)" />

@@ -180,6 +181,7 @@ function setCombinationResult(combinationId: number | undefined, value: string) v-if="item.images?.length" :items="item.images" :max-visible="1" + :all-stocks="item.images.map(() => `Stok: ${item.stock_input} ${item.unit_abbreviation}`)" />

diff --git a/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultCatalogPanel.vue b/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultCatalogPanel.vue index 79c47c2..70bd76d 100644 --- a/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultCatalogPanel.vue +++ b/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultCatalogPanel.vue @@ -30,15 +30,17 @@ const props = defineProps<{ const previewOpen = ref(false); const previewUrl = ref(null); const previewTitle = ref(''); +const previewStock = ref(''); const allVariantImages = computed(() => { - const list: { variantId: number; title: string; url: string }[] = []; + const list: { variantId: number; title: string; stock: string; url: string }[] = []; props.filteredProducts.forEach((product) => { product.variants.forEach((variant) => { if (variant.images && variant.images.length > 0) { list.push({ variantId: variant.id, title: `${product.name} - ${variant.name}`, + stock: `Stok: ${variant.stock} pcs`, url: variant.images[0].url, }); } @@ -56,6 +58,7 @@ function handleThumbClick(variantId: number) { if (idx !== -1) { previewUrl.value = allVariantImages.value[idx].url; previewTitle.value = allVariantImages.value[idx].title; + previewStock.value = allVariantImages.value[idx].stock; previewOpen.value = true; } } @@ -65,6 +68,7 @@ watch(previewUrl, (newUrl) => { if (matched) { previewTitle.value = matched.title; + previewStock.value = matched.stock; } }); @@ -168,5 +172,5 @@ const quickCreateOpen = ref(false); - + diff --git a/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultSummaryItems.vue b/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultSummaryItems.vue index 56236cf..0bdaf71 100644 --- a/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultSummaryItems.vue +++ b/resources/js/pages/admin/manage/cuttings/form/CuttingPosResultSummaryItems.vue @@ -50,6 +50,7 @@ const emit = defineEmits<{ v-if="item.images?.length" :items="item.images" :max-visible="1" + :all-stocks="item.images.map(() => `Stok: ${item.stock} pcs`)" />

diff --git a/resources/js/pages/admin/manage/cuttings/table/CuttingGroupedTable.vue b/resources/js/pages/admin/manage/cuttings/table/CuttingGroupedTable.vue index 447722b..23fe390 100644 --- a/resources/js/pages/admin/manage/cuttings/table/CuttingGroupedTable.vue +++ b/resources/js/pages/admin/manage/cuttings/table/CuttingGroupedTable.vue @@ -265,7 +265,7 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] { {{ material.variant }} - + {{ @@ -322,7 +322,7 @@ function getGroupedResults(results: any[]): GroupedCuttingResults[] { {{ result.product_variant?.name }} - + {{ result.cutting_result }} pcs diff --git a/resources/js/pages/admin/manage/cuttings/table/CuttingVerifyDialog.vue b/resources/js/pages/admin/manage/cuttings/table/CuttingVerifyDialog.vue index f412358..748df78 100644 --- a/resources/js/pages/admin/manage/cuttings/table/CuttingVerifyDialog.vue +++ b/resources/js/pages/admin/manage/cuttings/table/CuttingVerifyDialog.vue @@ -201,7 +201,7 @@ function submitVerify() {

- +

diff --git a/resources/js/pages/admin/manage/restocks/form/RestockPosCatalogPanel.vue b/resources/js/pages/admin/manage/restocks/form/RestockPosCatalogPanel.vue index 36c0f0d..4c4c135 100644 --- a/resources/js/pages/admin/manage/restocks/form/RestockPosCatalogPanel.vue +++ b/resources/js/pages/admin/manage/restocks/form/RestockPosCatalogPanel.vue @@ -26,6 +26,7 @@ const props = defineProps<{ const previewOpen = ref(false); const previewUrl = ref(null); const previewTitle = ref(''); +const previewStock = ref(''); const productSearch = defineModel('search', { required: true }); @@ -40,6 +41,7 @@ function handleThumbClick(variantId: number) { if (variant && variant.images && variant.images.length > 0) { previewUrl.value = variant.images[0].url; previewTitle.value = `${product.name} - ${variant.name}`; + previewStock.value = `Stok: ${variant.stock} pcs`; previewOpen.value = true; break; } @@ -117,5 +119,5 @@ function handleThumbClick(variantId: number) { - + diff --git a/resources/js/pages/admin/manage/stocks/table/StockPendingApprovalSection.vue b/resources/js/pages/admin/manage/stocks/table/StockPendingApprovalSection.vue index 9859d7a..f5aea86 100644 --- a/resources/js/pages/admin/manage/stocks/table/StockPendingApprovalSection.vue +++ b/resources/js/pages/admin/manage/stocks/table/StockPendingApprovalSection.vue @@ -200,7 +200,7 @@ function getGroupedMaterials(materials: any[]): GroupedCuttingMaterials[] { + :max-visible="1" :all-stocks="(result.product_variant?.images ?? []).map(() => `${result.cutting_result} pcs`)" /> {{ result.cutting_result }} pcs diff --git a/resources/js/pages/admin/manage/stocks/table/StockPendingSection.vue b/resources/js/pages/admin/manage/stocks/table/StockPendingSection.vue index 9efc90a..c5f82af 100644 --- a/resources/js/pages/admin/manage/stocks/table/StockPendingSection.vue +++ b/resources/js/pages/admin/manage/stocks/table/StockPendingSection.vue @@ -131,7 +131,7 @@ function getGroupedMaterials(materials: any[]): GroupedCuttingMaterials[] { + :max-visible="1" :all-stocks="(result.product_variant?.images ?? []).map(() => `${result.cutting_result} pcs`)" /> {{ result.cutting_result }} pcs @@ -189,7 +189,7 @@ function getGroupedMaterials(materials: any[]): GroupedCuttingMaterials[] { {{ material.variant }} - +