From 9e455c257251be1dc1f5b74768b72820ae3bd1bf Mon Sep 17 00:00:00 2001 From: safavimohadeseh78 Date: Sun, 9 Aug 2026 14:32:10 +0200 Subject: [PATCH] Fix order tracking desktop layout and gate settlement until invoice pricing. Show sidebar labels on tablet, improve theme-safe UI, and keep Jalali dates on tracking. Co-authored-by: Cursor --- src/assets/styles/desktop.css | 37 +-- src/assets/styles/responsive.css | 32 +- src/components/layout/CheckoutStepper.vue | 2 +- src/components/layout/DesktopHeader.vue | 7 +- src/components/layout/DesktopSidebar.vue | 75 ++--- src/components/orders/OrderStatusHero.vue | 2 +- .../orders/OrderTrackingTimeline.vue | 72 ++-- src/components/ui/AuthThemeToggle.vue | 39 ++- src/components/ui/BaseButton.vue | 4 +- src/components/ui/FormErrorBanner.vue | 4 +- src/composables/useRequirePricedOrder.ts | 42 +++ src/layouts/DefaultLayout.vue | 2 + src/utils/format.ts | 19 ++ src/utils/orderInvoice.ts | 43 +++ src/utils/orderTracking.ts | 22 +- src/views/cart/components/DesktopCartPage.vue | 17 +- src/views/cart/components/MobileCartPage.vue | 2 +- src/views/checkout/CashSettlementView.vue | 7 +- src/views/checkout/CheckFormView.vue | 6 +- src/views/checkout/CheckListView.vue | 18 +- src/views/checkout/CheckModeSelectView.vue | 43 ++- src/views/checkout/SettlementTypeView.vue | 147 ++++++--- .../components/DesktopHomeDashboard.vue | 29 +- src/views/orders/OrderDetailView.vue | 308 ++++++++++++------ .../profile/components/DesktopProfilePage.vue | 24 +- 25 files changed, 652 insertions(+), 351 deletions(-) create mode 100644 src/composables/useRequirePricedOrder.ts create mode 100644 src/utils/orderInvoice.ts diff --git a/src/assets/styles/desktop.css b/src/assets/styles/desktop.css index 2fed109..4389a62 100644 --- a/src/assets/styles/desktop.css +++ b/src/assets/styles/desktop.css @@ -544,44 +544,19 @@ /* Order detail desktop */ .order-detail-page { - max-width: var(--content-max-width); - margin-inline: auto; - padding: 24px var(--page-padding-desktop) 32px; + max-width: none; + margin-inline: 0; + padding: 24px 0 32px; background: transparent; - } - - .order-detail-page__tracking { - display: grid; - grid-template-columns: minmax(0, 1fr) 340px; - gap: 24px; - align-items: start; - } - - .order-detail-page__tracking > .status-hero { - grid-column: 1 / -1; - } - - .order-detail-page__tracking > .order-detail-back { - grid-column: 1 / -1; - } - - .order-detail-page__tracking > .tracking-card:first-of-type { - grid-column: 1; - } - - .order-detail-page__tracking > .tracking-summary { - grid-column: 2; - grid-row: 2 / span 2; - position: sticky; - top: 16px; - align-self: start; + height: auto; + overflow: visible; } .order-detail-back { display: inline-flex; align-items: center; gap: 6px; - margin-bottom: 20px; + margin-bottom: 12px; padding: 0; border: none; background: none; diff --git a/src/assets/styles/responsive.css b/src/assets/styles/responsive.css index f9d77af..0dacb06 100644 --- a/src/assets/styles/responsive.css +++ b/src/assets/styles/responsive.css @@ -222,39 +222,15 @@ /* Order detail & tracking */ .order-detail-page__body { - max-width: var(--content-max-width); - margin-inline: auto; + max-width: none; + margin-inline: 0; width: 100%; } - .order-detail-page__tracking { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(280px, 340px); - gap: 20px; - align-items: start; - } - - .order-detail-page__tracking > .status-hero { - grid-column: 1 / -1; - } - - .order-detail-page__tracking > .tracking-card { - grid-column: 1; - } - - .order-detail-page__tracking > .tracking-summary { - grid-column: 2; - grid-row: 2; - position: sticky; - top: 16px; - align-self: start; - } - .order-detail-page__footer { - max-width: var(--content-max-width); - margin-inline: auto; + max-width: none; + margin-inline: 0; width: 100%; - padding-inline: var(--page-padding); } /* Checkout forms */ diff --git a/src/components/layout/CheckoutStepper.vue b/src/components/layout/CheckoutStepper.vue index 19f14c7..1328f6c 100644 --- a/src/components/layout/CheckoutStepper.vue +++ b/src/components/layout/CheckoutStepper.vue @@ -5,7 +5,7 @@ defineProps<{ const steps = [ { num: 1, label: 'سبد خرید' }, - { num: 2, label: 'ثبت سفارش' }, + { num: 2, label: 'پیش‌سفارش' }, { num: 3, label: 'صدور فاکتور' }, { num: 4, label: 'تسویه' }, ] diff --git a/src/components/layout/DesktopHeader.vue b/src/components/layout/DesktopHeader.vue index 35c3784..d1bd351 100644 --- a/src/components/layout/DesktopHeader.vue +++ b/src/components/layout/DesktopHeader.vue @@ -7,6 +7,7 @@ import { useNotificationStore } from '@/stores/notification' import IconSearch from '@/components/icons/IconSearch.vue' import IconBell from '@/components/icons/IconBell.vue' import IconChevronLeft from '@/components/icons/IconChevronLeft.vue' +import AuthThemeToggle from '@/components/ui/AuthThemeToggle.vue' import { toPersianDigits } from '@/utils/format' const route = useRoute() @@ -82,6 +83,8 @@ function logout() {
{{ companyLabel }} + +