Initial commit: fabric-trade-user Vue 3 app with mobile and desktop layouts
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
import type { Order, OrderStatus } from '@/types'
|
||||
import { ORDER_TRACKING_STEPS } from '@/utils/constants'
|
||||
|
||||
export type StatusHeroVariant = 'waiting' | 'success' | 'info' | 'none'
|
||||
|
||||
export interface StatusHeroConfig {
|
||||
variant: StatusHeroVariant
|
||||
title: string
|
||||
description?: string
|
||||
}
|
||||
|
||||
const STATUS_STEP_INDEX: Partial<Record<OrderStatus, number>> = {
|
||||
submitted: 0,
|
||||
awaiting_review: 1,
|
||||
pricing: 2,
|
||||
check_in_progress: 3,
|
||||
awaiting_check_review: 4,
|
||||
check_needs_fix: 4,
|
||||
check_rejected: 4,
|
||||
checks_approved: 5,
|
||||
final_approved: 6,
|
||||
cash_confirmed: 6,
|
||||
preparing: 7,
|
||||
ready_to_ship: 8,
|
||||
shipped: 9,
|
||||
delivered: 10,
|
||||
}
|
||||
|
||||
const STATUS_HERO: Partial<Record<OrderStatus, StatusHeroConfig>> = {
|
||||
awaiting_review: {
|
||||
variant: 'waiting',
|
||||
title: 'در انتظار بررسی مدیریت',
|
||||
description: 'سفارش شما ثبت شده و در صف بررسی مدیریت قرار دارد. پس از بررسی، نتیجه از طریق همین صفحه اطلاعرسانی میشود.',
|
||||
},
|
||||
pricing: {
|
||||
variant: 'waiting',
|
||||
title: 'در حال قیمتگذاری',
|
||||
description: 'مدیریت در حال تعیین مبلغ نهایی فاکتور است. لطفاً کمی صبر کنید.',
|
||||
},
|
||||
awaiting_check_review: {
|
||||
variant: 'waiting',
|
||||
title: 'در حال بررسی چکها',
|
||||
description: 'چکهای ثبتشده در حال بررسی هستند. نتیجه بررسی بهزودی اعلام میشود.',
|
||||
},
|
||||
checks_approved: {
|
||||
variant: 'success',
|
||||
title: 'چکها تأیید شده',
|
||||
description: 'چکهای شما توسط مدیریت تأیید شد. سفارش وارد مراحل بعدی میشود.',
|
||||
},
|
||||
cash_confirmed: {
|
||||
variant: 'success',
|
||||
title: 'پرداخت تأیید شد',
|
||||
description: 'رسید پرداخت شما تأیید شد و سفارش وارد مراحل بعدی میشود.',
|
||||
},
|
||||
final_approved: {
|
||||
variant: 'success',
|
||||
title: 'تأیید نهایی',
|
||||
description: 'سفارش شما تأیید نهایی شد و آماده آمادهسازی است.',
|
||||
},
|
||||
preparing: {
|
||||
variant: 'info',
|
||||
title: 'در حال آمادهسازی',
|
||||
description: 'سفارش شما در انبار در حال آمادهسازی است.',
|
||||
},
|
||||
ready_to_ship: {
|
||||
variant: 'info',
|
||||
title: 'آماده ارسال',
|
||||
description: 'سفارش آماده ارسال است و بهزودی تحویل باربری میشود.',
|
||||
},
|
||||
shipped: {
|
||||
variant: 'info',
|
||||
title: 'ارسال شده',
|
||||
description: 'سفارش ارسال شده است. جزئیات بارنامه را میتوانید مشاهده کنید.',
|
||||
},
|
||||
delivered: {
|
||||
variant: 'success',
|
||||
title: 'تحویل شده',
|
||||
description: 'سفارش با موفقیت تحویل داده شد.',
|
||||
},
|
||||
}
|
||||
|
||||
export function getTrackingStepIndex(status: OrderStatus): number {
|
||||
return STATUS_STEP_INDEX[status] ?? 1
|
||||
}
|
||||
|
||||
export function getStatusHero(status: OrderStatus): StatusHeroConfig | null {
|
||||
return STATUS_HERO[status] ?? null
|
||||
}
|
||||
|
||||
export function getStepTimestamp(order: Order, stepStatus: OrderStatus): string | null {
|
||||
if (stepStatus === 'submitted') {
|
||||
return order.createdAt
|
||||
}
|
||||
|
||||
const entry = [...order.statusHistory]
|
||||
.reverse()
|
||||
.find((item) => item.toStatus === stepStatus)
|
||||
|
||||
return entry?.changedAt ?? null
|
||||
}
|
||||
|
||||
export function getTrackingFooterLabel(status: OrderStatus): string {
|
||||
if (status === 'shipped') return 'مشاهده جزئیات و بارنامه'
|
||||
if (['checks_approved', 'cash_confirmed', 'delivered', 'final_approved'].includes(status)) {
|
||||
return 'مشاهده جزئیات'
|
||||
}
|
||||
return 'مشاهده جزئیات سفارش'
|
||||
}
|
||||
|
||||
export { ORDER_TRACKING_STEPS }
|
||||
Reference in New Issue
Block a user