From dcb595263d6d01c35a377b7f6d2ae9798308d5ba Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev Date: Mon, 6 Apr 2026 11:58:13 +0700 Subject: [PATCH] Inline manager order editing --- app/components/orders/OrderItemsTable.vue | 32 ++- app/pages/client-orders/[id].vue | 282 ++++++++++++++++++++-- 2 files changed, 285 insertions(+), 29 deletions(-) diff --git a/app/components/orders/OrderItemsTable.vue b/app/components/orders/OrderItemsTable.vue index 96e8280..5243b8b 100644 --- a/app/components/orders/OrderItemsTable.vue +++ b/app/components/orders/OrderItemsTable.vue @@ -20,12 +20,16 @@ const props = defineProps<{ mode?: 'readonly' | 'manager-pricing' | 'cart'; editable?: boolean; unitPriceDrafts?: Record; + editablePriceItemIds?: string[]; disabled?: boolean; framed?: boolean; + pricePlaceholder?: string; }>(); const emit = defineEmits<{ 'update:unit-price': [payload: { itemId: string; value: string }]; + 'activate:unit-price': [itemId: string]; + 'finish:unit-price': [itemId: string]; increment: [itemId: string]; decrement: [itemId: string]; remove: [itemId: string]; @@ -86,6 +90,18 @@ function updateUnitPrice(itemId: string, event: Event) { }); } +function activateUnitPrice(itemId: string) { + if (!isPricingMode.value || props.disabled) { + return; + } + + emit('activate:unit-price', itemId); +} + +function finishUnitPrice(itemId: string) { + emit('finish:unit-price', itemId); +} + function incrementItem(itemId: string) { emit('increment', itemId); } @@ -110,6 +126,8 @@ const mode = computed(() => props.mode ?? (props.editable ? 'manager-pricing' : const isPricingMode = computed(() => mode.value === 'manager-pricing'); const isCartMode = computed(() => mode.value === 'cart'); const isFramed = computed(() => props.framed ?? true); +const editablePriceItemIds = computed(() => new Set(props.editablePriceItemIds ?? [])); +const displayPricePlaceholder = computed(() => props.pricePlaceholder ?? '—'); function mapParameterEntries(source: Record | null | undefined): ItemParameter[] { if (!source || typeof source !== 'object') { @@ -187,18 +205,26 @@ function itemParameters(item: OrderItemView) {

Цена

-

- {{ formatPrice(currentUnitPrice(item)) || '—' }} +

+ {{ formatPrice(currentUnitPrice(item)) || displayPricePlaceholder }}

diff --git a/app/pages/client-orders/[id].vue b/app/pages/client-orders/[id].vue index ed74cbc..a39e78a 100644 --- a/app/pages/client-orders/[id].vue +++ b/app/pages/client-orders/[id].vue @@ -1,6 +1,9 @@