From bb39642b6793c7edcb95c88e006b09dfaf7b06c3 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Mon, 6 Apr 2026 15:21:05 +0700 Subject: [PATCH] Refine order detail layout --- .../orders/OrderDeliveryLine.stories.ts | 31 ++++ app/components/orders/OrderDeliveryLine.vue | 162 ++++++++++++++++++ .../orders/OrderStatusTimelineCard.vue | 79 ++++++--- app/pages/client-orders/[id].vue | 102 ++++------- app/pages/orders/[id].vue | 48 ++---- 5 files changed, 301 insertions(+), 121 deletions(-) create mode 100644 app/components/orders/OrderDeliveryLine.stories.ts create mode 100644 app/components/orders/OrderDeliveryLine.vue diff --git a/app/components/orders/OrderDeliveryLine.stories.ts b/app/components/orders/OrderDeliveryLine.stories.ts new file mode 100644 index 0000000..80f649d --- /dev/null +++ b/app/components/orders/OrderDeliveryLine.stories.ts @@ -0,0 +1,31 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite'; +import OrderDeliveryLine from './OrderDeliveryLine.vue'; + +const meta: Meta = { + title: 'Orders/OrderDeliveryLine', + component: OrderDeliveryLine, +}; + +export default meta; + +type Story = StoryObj; + +export const Readonly: Story = { + args: { + deliveryAddress: 'г. Казань, ул. Магистральная, 14', + deliveryTerms: 'Доставка до склада за 2-3 рабочих дня', + deliveryFee: 3200, + }, +}; + +export const ManagerEditing: Story = { + args: { + mode: 'manager', + canEdit: true, + editingDeliveryTerms: true, + editingDeliveryFee: true, + deliveryAddress: 'г. Казань, ул. Магистральная, 14', + deliveryTermsDraft: 'Доставка до склада за 2-3 рабочих дня', + deliveryFeeDraft: '3200', + }, +}; diff --git a/app/components/orders/OrderDeliveryLine.vue b/app/components/orders/OrderDeliveryLine.vue new file mode 100644 index 0000000..bf88d36 --- /dev/null +++ b/app/components/orders/OrderDeliveryLine.vue @@ -0,0 +1,162 @@ + + + diff --git a/app/components/orders/OrderStatusTimelineCard.vue b/app/components/orders/OrderStatusTimelineCard.vue index cb68c27..cbc134d 100644 --- a/app/components/orders/OrderStatusTimelineCard.vue +++ b/app/components/orders/OrderStatusTimelineCard.vue @@ -12,16 +12,6 @@ const isExpanded = ref(false); const presentation = computed(() => getOrderStatusPresentation(props.status, props.createdAt, props.audience ?? 'client')); -function itemClass(state: 'done' | 'current' | 'upcoming') { - if (state === 'current') { - return 'bg-white shadow-[0_14px_28px_rgba(19,153,87,0.08)]'; - } - if (state === 'done') { - return 'bg-white'; - } - return 'bg-white'; -} - function markerClass(state: 'done' | 'current' | 'upcoming') { if (state === 'current') { return 'bg-[#139957] ring-4 ring-[#dff4e8]'; @@ -31,6 +21,36 @@ function markerClass(state: 'done' | 'current' | 'upcoming') { } return 'bg-[#d8e4dd]'; } + +function connectorClass(state: 'done' | 'current' | 'upcoming') { + if (state === 'done' || state === 'current') { + return 'bg-[#cfe5d7]'; + } + + return 'bg-[#e4ece7]'; +} + +function titleClass(state: 'done' | 'current' | 'upcoming') { + if (state === 'current') { + return 'text-[#123824]'; + } + if (state === 'done') { + return 'text-[#355947]'; + } + + return 'text-[#6a8a76]'; +} + +function noteClass(state: 'done' | 'current' | 'upcoming') { + if (state === 'current') { + return 'text-[#355947]'; + } + if (state === 'done') { + return 'text-[#557562]'; + } + + return 'text-[#7d9688]'; +}