diff --git a/src/constant/routes.ts b/src/constant/routes.ts index 03e6e5d..4db9a25 100644 --- a/src/constant/routes.ts +++ b/src/constant/routes.ts @@ -38,11 +38,11 @@ export const API_ROUTES = { DELETE_PERMISSION: (id: string) => `permissions/${id}`, // Product Options APIs (non-admin) - GET_PRODUCT_OPTIONS: "api/v1/product-options", - GET_PRODUCT_OPTION: (id: string) => `api/v1/product-options/${id}`, - CREATE_PRODUCT_OPTION: "api/v1/product-options", - UPDATE_PRODUCT_OPTION: (id: string) => `api/v1/product-options/${id}`, - DELETE_PRODUCT_OPTION: (id: string) => `api/v1/product-options/${id}`, + GET_PRODUCT_OPTIONS: "products/options", + GET_PRODUCT_OPTION: (id: string) => `products/options/${id}`, + CREATE_PRODUCT_OPTION: "products/options", + UPDATE_PRODUCT_OPTION: (id: string) => `products/options/${id}`, + DELETE_PRODUCT_OPTION: (id: string) => `products/options/${id}`, // Categories APIs (non-admin) GET_CATEGORIES: "api/v1/products/categories", @@ -79,7 +79,7 @@ export const API_ROUTES = { DELETE_IMAGE: (imageId: string) => `api/v1/products/images/${imageId}`, // Landing Hero APIs - GET_LANDING_HERO: "api/v1/settings/landing/hero", // non-admin + GET_LANDING_HERO: "settings/landing/hero", // non-admin UPDATE_LANDING_HERO: "settings/landing/hero", // admin // Discount Codes APIs diff --git a/src/pages/orders/core/_models.ts b/src/pages/orders/core/_models.ts index 94e2602..678049c 100644 --- a/src/pages/orders/core/_models.ts +++ b/src/pages/orders/core/_models.ts @@ -22,25 +22,37 @@ export interface OrderItem { product_image?: string; variant_id?: number; variant_name?: string; + product_variant_id?: number; + product_variant_name?: string; quantity: number; unit_price: number; total_price: number; discount_amount?: number; + weight?: number; + final_weight?: number; } export interface OrderAddress { id: number; - type: "billing" | "shipping"; - first_name: string; - last_name: string; + type?: "billing" | "shipping"; + // legacy fields + first_name?: string; + last_name?: string; company?: string; - address_line_1: string; + address_line_1?: string; address_line_2?: string; - city: string; - state: string; - postal_code: string; - country: string; + city?: string; + state?: string; + postal_code?: string; + country?: string; phone?: string; + // new fields + name?: string; + address?: string; + region?: string; + plaque?: number; + unit?: number; + receiving_address?: string; } export interface OrderPayment { @@ -65,18 +77,37 @@ export interface Order { order: { id: number; order_number: string; - customer: OrderCustomer; + customer?: OrderCustomer; status: OrderStatus; items: OrderItem[]; billing_address: OrderAddress; shipping_address: OrderAddress; - payment: OrderPayment; - subtotal: number; - tax_amount: number; - shipping_amount: number; - discount_amount: number; - total_amount: number; - final_total: number; + payment?: OrderPayment; + // new flat fields from API + invoice_id?: number; + user_id?: number; + user?: { + id: number; + phone_number: string; + first_name: string; + last_name: string; + email: string; + national_code?: string; + verified: boolean; + avatar?: string; + }; + payment_status?: PaymentStatus; + net_total?: number; + vat_total?: number; + shipping_total?: number; + discount_total?: number; + // legacy totals kept for compatibility + subtotal?: number; + tax_amount?: number; + shipping_amount?: number; + discount_amount?: number; + total_amount?: number; + final_total?: number; currency: string; notes?: string; tracking_number?: string; diff --git a/src/pages/orders/order-detail/OrderDetailPage.tsx b/src/pages/orders/order-detail/OrderDetailPage.tsx index 5ba7183..1340127 100644 --- a/src/pages/orders/order-detail/OrderDetailPage.tsx +++ b/src/pages/orders/order-detail/OrderDetailPage.tsx @@ -169,10 +169,7 @@ const OrderDetailPage = () => {

تاریخ آخرین بروزرسانی

{order?.updated_at ? formatDate(order.updated_at) : 'نامشخص'}

-
-

روش حمل و نقل

-

{order?.shipping_method_id || 'تعریف نشده'}

-
+ {/* روش حمل و نقل در داده‌های فعلی وجود ندارد */} {order?.tracking_number && (

کد رهگیری

@@ -207,55 +204,72 @@ const OrderDetailPage = () => { محصولات سفارش
-
-
- {order?.items && order.items.length > 0 ? order.items.map((item) => ( -
- {item.product_image && ( - {item.product_name} - )} -
-

- {item.product_name || `محصول شناسه: ${item.product_id}`} -

-

- {item.product_variant_name || `واریانت شناسه: ${item.product_variant_id}`} -

-

- شناسه آیتم: {item.id} -

-
- - تعداد: {item.quantity} - - - قیمت واحد: {formatCurrency(item.unit_price || 0)} - - - وزن: {item.weight || 0} کگ - - {item.final_weight && item.final_weight !== item.weight && ( - - وزن نهایی: {item.final_weight} کگ - - )} -
-
-
-

- {formatCurrency(item.total_price || 0)} -

-
+
+ {order?.items && order.items.length > 0 ? ( +
+
+
محصول
+
تعداد
+
وزن (گرم)
+
قیمت واحد
+
جمع
- )) : ( -

- محصولی در این سفارش یافت نشد -

- )} + {order.items.map((item) => { + const baseWeight = (item.final_weight ?? item.weight ?? 0) as number; + const weightGr = Math.round(baseWeight * 1000); + const formatFa = (n: number) => new Intl.NumberFormat('fa-IR').format(n); + return ( +
+
+
+ {item.product_name || `محصول شناسه: ${item.product_id}`} +
+
+ {item.product_variant_name || `واریانت شناسه: ${item.product_variant_id}`} +
+
+
{formatFa(item.quantity || 0)}
+
{formatFa(weightGr)}
+
{formatCurrency(item.unit_price || 0)}
+
{formatCurrency(item.total_price || 0)}
+
+ ); + })} +
+ ) : ( +

+ محصولی در این سفارش یافت نشد +

+ )} +
+
+ {/* آدرس‌ها - منتقل شده به زیر محصولات */} +
+
+
+
+ +
+ آدرس‌ها +
+
+
+
+

آدرس ارسال

+
+

نام: {order?.shipping_address?.name || 'نام نامشخص'}

+

آدرس: {order?.shipping_address?.address || 'آدرس نامشخص'}

+

شهر: {order?.shipping_address?.city || 'شهر نامشخص'}, استان: {order?.shipping_address?.state || 'استان نامشخص'}

+

کشور: {order?.shipping_address?.country || 'کشور نامشخص'}

+

منطقه: {order?.shipping_address?.region || 'منطقه نامشخص'}

+

کد پستی: {order?.shipping_address?.postal_code || 'نامشخص'}

+ {order?.shipping_address?.plaque && ( +

پلاک: {order.shipping_address.plaque}, واحد: {order.shipping_address.unit || 'ندارد'}

+ )} + {order?.shipping_address?.receiving_address && ( +

آدرس تحویل: {order.shipping_address.receiving_address}

+ )} +
@@ -308,72 +322,9 @@ const OrderDetailPage = () => { )}
- {/* اطلاعات مشتری */} -
-
-
-
- -
- اطلاعات مشتری -
-
-
- {order?.customer ? ( -
-
-

نام

-

- {order.customer.first_name || 'نامشخص'} {order.customer.last_name || ''} -

-
-
- -

{order.customer.email || 'ایمیل نامشخص'}

-
- {order.customer.phone && ( -
- -

{order.customer.phone}

-
- )} -
- ) : ( -

اطلاعات مشتری در دسترس نیست

- )} -
-
- {/* آدرس‌ها */} -
-
-
-
- -
- آدرس‌ها -
-
-
-
-

آدرس ارسال

-
-

نام: {order?.shipping_address?.name || 'نام نامشخص'}

-

آدرس: {order?.shipping_address?.address || 'آدرس نامشخص'}

-

شهر: {order?.shipping_address?.city || 'شهر نامشخص'}, استان: {order?.shipping_address?.state || 'استان نامشخص'}

-

کشور: {order?.shipping_address?.country || 'کشور نامشخص'}

-

منطقه: {order?.shipping_address?.region || 'منطقه نامشخص'}

-

کد پستی: {order?.shipping_address?.postal_code || 'نامشخص'}

- {order?.shipping_address?.plaque && ( -

پلاک: {order.shipping_address.plaque}, واحد: {order.shipping_address.unit || 'ندارد'}

- )} - {order?.shipping_address?.receiving_address && ( -

آدرس تحویل: {order.shipping_address.receiving_address}

- )} -
-
-
-
+ + {/* اطلاعات پرداخت */}
@@ -401,7 +352,7 @@ const OrderDetailPage = () => { {(order?.discount_total || 0) > 0 && (
تخفیف - -{formatCurrency(order.discount_total)} + -{formatCurrency(order?.discount_total || 0)}
)}