diff --git a/app/Http/Requests/Admin/Master/ProductRequest.php b/app/Http/Requests/Admin/Master/ProductRequest.php index 3efb4fa..ea4db5a 100644 --- a/app/Http/Requests/Admin/Master/ProductRequest.php +++ b/app/Http/Requests/Admin/Master/ProductRequest.php @@ -37,7 +37,7 @@ public function rules(): array ...$this->productVariantRules( productId: $this->route('product')?->id, - imagesRequired: $this->isMethod('POST'), + imagesRequired: $this->route('product') === null, ), ]; } diff --git a/resources/js/composables/useVariantList.ts b/resources/js/composables/useVariantList.ts index a9c4717..c4f5ebe 100644 --- a/resources/js/composables/useVariantList.ts +++ b/resources/js/composables/useVariantList.ts @@ -21,8 +21,8 @@ export function useVariantList( items.value = [...items.value, createEmpty()]; } - function removeItem(clientId: string) { - if (items.value.length <= 1) { + function removeItem(clientId: string, force = false) { + if (!force && items.value.length <= 1) { return; } diff --git a/resources/js/pages/admin/manage/purchases/form/PurchasePosCartSummaryItems.vue b/resources/js/pages/admin/manage/purchases/form/PurchasePosCartSummaryItems.vue index 7355b2b..dec3d6c 100644 --- a/resources/js/pages/admin/manage/purchases/form/PurchasePosCartSummaryItems.vue +++ b/resources/js/pages/admin/manage/purchases/form/PurchasePosCartSummaryItems.vue @@ -24,6 +24,7 @@ const emit = defineEmits<{ remove: [index: number]; 'adjust-quantity': [index: number, delta: number]; 'sync-quantity': [index: number]; + 'sync-quantity-input': [index: number]; }>(); @@ -82,6 +83,7 @@ const emit = defineEmits<{ + + + + + + @@ -682,6 +840,7 @@ function submit() { diff --git a/resources/js/pages/admin/master/raw-materials/form/RawMaterialInfoSection.vue b/resources/js/pages/admin/master/raw-materials/form/RawMaterialInfoSection.vue index c1548bf..d8ec8b9 100644 --- a/resources/js/pages/admin/master/raw-materials/form/RawMaterialInfoSection.vue +++ b/resources/js/pages/admin/master/raw-materials/form/RawMaterialInfoSection.vue @@ -25,6 +25,7 @@ defineProps<{ units: EnumOption[]; method: 'post' | 'put'; selectPortalTarget?: HTMLElement; + disabled?: boolean; }>(); @@ -44,6 +45,7 @@ defineProps<{ type="text" placeholder="Masukkan nama bahan baku" :maxlength="FIELD_LIMITS.name" + :disabled="disabled" /> diff --git a/resources/js/pages/admin/master/raw-materials/form/RawMaterialVariantSection.vue b/resources/js/pages/admin/master/raw-materials/form/RawMaterialVariantSection.vue index 130b048..bf5b87c 100644 --- a/resources/js/pages/admin/master/raw-materials/form/RawMaterialVariantSection.vue +++ b/resources/js/pages/admin/master/raw-materials/form/RawMaterialVariantSection.vue @@ -14,6 +14,13 @@ import { } from '@/components/ui/field'; import FieldDescription from '@/components/ui/field/FieldDescription.vue'; import { Input } from '@/components/ui/input'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; import { FIELD_LIMITS } from '@/lib/field-limits'; import type { FormWithErrors } from '@/lib/form'; import type { RawMaterialPriceFormItem } from '@/types/raw-material'; @@ -25,6 +32,7 @@ defineProps<{ totalPrices: number; useSamePrice: boolean; priceErrors: (clientId: string, field: string) => string[]; + variantOptions?: { value: string; label: string }[]; }>(); const emit = defineEmits<{ @@ -59,7 +67,18 @@ const emit = defineEmits<{ Nama Varian - + + + + + + {{ opt.label }} + + + +