card owner
Build and Deploy Docker Images / build_and_deploy (push) Has been cancelled

This commit is contained in:
hamid zarghami
2026-06-15 12:56:22 +03:30
parent 2229c13784
commit 2b211b5b1a
4 changed files with 76 additions and 1 deletions
@@ -74,6 +74,7 @@ export const PaymentSection = ({ paymentType, onPaymentTypeChange }: PaymentSect
icon: getIconByMethod(item.method), icon: getIconByMethod(item.method),
method: item.method, method: item.method,
cardNumber: item.cardNumber, cardNumber: item.cardNumber,
cardOwner: item.cardOwner,
description: item.description, description: item.description,
isWallet: item.method === PaymentMethodEnum.Wallet, isWallet: item.method === PaymentMethodEnum.Wallet,
})); }));
@@ -159,6 +160,16 @@ export const PaymentSection = ({ paymentType, onPaymentTypeChange }: PaymentSect
{selectedCreditCard && ( {selectedCreditCard && (
<div className='mt-6 pt-4 border-t border-border flex flex-col gap-4'> <div className='mt-6 pt-4 border-t border-border flex flex-col gap-4'>
{selectedCreditCard.cardOwner && (
<div>
<span className='text-xs text-gray-500 dark:text-gray-400'>
{tOrderDetail('SectionPayment.CreditCard.CardOwnerLabel')}
</span>
<p className='text-sm font-medium mt-1'>
{selectedCreditCard.cardOwner}
</p>
</div>
)}
{selectedCreditCard.cardNumber && ( {selectedCreditCard.cardNumber && (
<div> <div>
<span className='text-xs text-gray-500 dark:text-gray-400'> <span className='text-xs text-gray-500 dark:text-gray-400'>
@@ -112,6 +112,7 @@ export interface PaymentMethodResponse {
gateway: string | null; gateway: string | null;
description: string; description: string;
cardNumber: string | null; cardNumber: string | null;
cardOwner: string | null;
enabled: boolean; enabled: boolean;
order: number; order: number;
merchantId: string | null; merchantId: string | null;
@@ -362,6 +363,7 @@ export interface OrderDetailPaymentMethod {
gateway: string | null; gateway: string | null;
description: string; description: string;
cardNumber: string | null; cardNumber: string | null;
cardOwner: string | null;
enabled: boolean; enabled: boolean;
order: number; order: number;
merchantId: string | null; merchantId: string | null;
@@ -426,6 +428,7 @@ export interface OrderDetailPayment {
paidAt: string | null; paidAt: string | null;
failedAt: string | null; failedAt: string | null;
description: string | null; description: string | null;
attachments: string[];
} }
export interface OrderDetailCarAddress { export interface OrderDetailCarAddress {
@@ -435,6 +438,17 @@ export interface OrderDetailCarAddress {
plateNumber: string; plateNumber: string;
} }
export interface OrderDetailUserAddress {
city: string;
phone: string;
address: string;
fullName: string;
latitude: number;
province: string;
longitude: number;
postalCode: string;
}
export interface OrderDetail { export interface OrderDetail {
id: string; id: string;
createdAt: string; createdAt: string;
@@ -443,7 +457,7 @@ export interface OrderDetail {
user: OrderDetailUser; user: OrderDetailUser;
restaurant: OrderDetailRestaurant; restaurant: OrderDetailRestaurant;
deliveryMethod: OrderDetailDeliveryMethod; deliveryMethod: OrderDetailDeliveryMethod;
userAddress: OrderAddress | null; userAddress: OrderDetailUserAddress | null;
carAddress: OrderDetailCarAddress | null; carAddress: OrderDetailCarAddress | null;
paymentMethod: OrderDetailPaymentMethod; paymentMethod: OrderDetailPaymentMethod;
orderNumber: number; orderNumber: number;
@@ -461,9 +475,12 @@ export interface OrderDetail {
status: status:
| "pendingPayment" | "pendingPayment"
| "new" | "new"
| "paid"
| "confirmed"
| "preparing" | "preparing"
| "ready" | "ready"
| "delivering" | "delivering"
| "completed"
| "delivered" | "delivered"
| "cancelled"; | "cancelled";
history: OrderDetailHistory[]; history: OrderDetailHistory[];
@@ -1,6 +1,7 @@
'use client'; 'use client';
import { useParams, useRouter } from 'next/navigation'; import { useParams, useRouter } from 'next/navigation';
import Image from 'next/image';
import React from 'react'; import React from 'react';
import Button from '@/components/button/PrimaryButton'; import Button from '@/components/button/PrimaryButton';
import { Skeleton } from '@/components/ui/skeleton'; import { Skeleton } from '@/components/ui/skeleton';
@@ -29,6 +30,11 @@ const getDeliveryMethodTitle = (method: string) => {
} }
}; };
const getPaymentMethodTitle = (method: string, fallback?: string) => {
const methodKey = method as keyof typeof ordersTranslations.paymentMethod;
return ordersTranslations.paymentMethod[methodKey] || fallback || 'نامشخص';
};
// const getStatusPercentage = (status: string) => { // const getStatusPercentage = (status: string) => {
// switch (status) { // switch (status) {
// case 'new': // case 'new':
@@ -164,6 +170,46 @@ function OrderTrackingPage() {
</div> </div>
)} )}
{orderDetail.data.paymentMethod && (
<div className='flex justify-between items-center h-16 border-b border-border'>
<span className='text-sm text-muted-foreground'>نوع پرداخت</span>
<span className='text-sm font-semibold'>
{getPaymentMethodTitle(
orderDetail.data.paymentMethod.method,
orderDetail.data.paymentMethod.description
)}
</span>
</div>
)}
{orderDetail.data.payments?.[0]?.description?.trim() && (
<div className='py-3 border-b border-border'>
<div className='text-sm text-muted-foreground mb-1'>توضیحات پرداخت</div>
<div className='text-sm'>{orderDetail.data.payments[0].description}</div>
</div>
)}
{orderDetail.data.payments?.[0]?.attachments?.length ? (
<div className='py-3 border-b border-border'>
<div className='text-sm text-muted-foreground mb-2'>پیوست پرداخت</div>
<div className='flex flex-col gap-2'>
{orderDetail.data.payments[0].attachments.map((attachment, index) => (
<div
key={attachment}
className='relative w-full h-40 rounded-normal overflow-hidden border border-border'
>
<Image
src={attachment}
alt={`پیوست پرداخت ${index + 1}`}
fill
className='object-contain'
/>
</div>
))}
</div>
</div>
) : null}
<div className='flex justify-between items-center py-4 border-t border-border'> <div className='flex justify-between items-center py-4 border-t border-border'>
<span className='text-sm font-medium'>مجموع سفارش</span> <span className='text-sm font-medium'>مجموع سفارش</span>
<span className='text-sm font-bold '> <span className='text-sm font-bold '>
+1
View File
@@ -68,6 +68,7 @@
"SectionPayment": { "SectionPayment": {
"Title": "انتخاب شیوه پرداخت", "Title": "انتخاب شیوه پرداخت",
"CreditCard": { "CreditCard": {
"CardOwnerLabel": "نام صاحب کارت",
"CardNumberLabel": "شماره کارت", "CardNumberLabel": "شماره کارت",
"PaymentDescLabel": "توضیحات پرداخت", "PaymentDescLabel": "توضیحات پرداخت",
"PaymentDescPlaceholder": "مثال: واریز از حساب با شماره ۱۲۳۴", "PaymentDescPlaceholder": "مثال: واریز از حساب با شماره ۱۲۳۴",