orders
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
VITE_API_BASE_URL = 'http://10.22.13.88:4000'
|
||||
VITE_API_BASE_URL = 'http://10.24.161.1:4000'
|
||||
VITE_TOKEN_NAME = 'negareh_at'
|
||||
VITE_REFRESH_TOKEN_NAME = 'negareh_art'
|
||||
+28
-18
@@ -2,8 +2,13 @@ import Filters from '@/components/Filters'
|
||||
import { type FC } from 'react'
|
||||
import Table from '@/components/Table'
|
||||
import { Edit2, Eye, Receipt21, Setting2 } from 'iconsax-react'
|
||||
import { useGetOrders } from './hooks/useOrderData'
|
||||
import moment from 'moment-jalaali'
|
||||
|
||||
const OrdersList: FC = () => {
|
||||
|
||||
const { data } = useGetOrders()
|
||||
|
||||
return (
|
||||
<div className='mt-5'>
|
||||
<h1 className='text-lg font-light'>سفارش ها</h1>
|
||||
@@ -37,24 +42,39 @@ const OrdersList: FC = () => {
|
||||
<Table
|
||||
columns={[
|
||||
{
|
||||
key: 'id',
|
||||
key: 'orderNumber',
|
||||
title: 'شماره',
|
||||
},
|
||||
{
|
||||
key: 'title',
|
||||
title: 'عنوان',
|
||||
},
|
||||
{
|
||||
key: 'customer',
|
||||
title: 'مشتری',
|
||||
render: (item) => {
|
||||
return (
|
||||
<div>
|
||||
{item.user?.firstName ? item.user?.firstName + ' ' + item.user?.lastName : item.user?.phone}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'date',
|
||||
key: 'createdAt',
|
||||
title: 'تاریخ ایجاد ',
|
||||
render: (item) => {
|
||||
return (
|
||||
<div>{moment(item.createdAt).format('jYYYY-jMM-jDD')}</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'type',
|
||||
title: 'نوع',
|
||||
title: 'تعداد اقلام',
|
||||
render: (item) => {
|
||||
return (
|
||||
<div>
|
||||
{item.items.length}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'designer',
|
||||
@@ -86,17 +106,7 @@ const OrdersList: FC = () => {
|
||||
}
|
||||
},
|
||||
]}
|
||||
data={[
|
||||
{
|
||||
id: 1,
|
||||
title: 'سفارش 1',
|
||||
customer: 'مشتری 1',
|
||||
date: '2025/01/01',
|
||||
type: 'نوع 1',
|
||||
designer: 'مجری 1',
|
||||
status: 'درحال انتظار',
|
||||
}
|
||||
]}
|
||||
data={data?.data}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
export enum OrderStatusEnum {
|
||||
CREATED = "created",
|
||||
|
||||
INVOICED = "invoiced",
|
||||
WAITING_to_CONFIRM_INVOICE = "waiting_to_confirm_invoice",
|
||||
|
||||
DESIGN_INITIATED = "design_initiated",
|
||||
DESIGN_FINISHED = "design_finished",
|
||||
DESIGN_REVISION = "design_revision",
|
||||
|
||||
READY_TO_PRINTING = "ready_to_printing",
|
||||
IN_PRINTING = "in_printing",
|
||||
|
||||
READY_FOR_DELIVERY = "ready_for_delivery",
|
||||
DELIVERED = "delivered",
|
||||
|
||||
AFTER_PRINT_COVER = "after_print_cover",
|
||||
AFTER_PRINT_BOXING = "after_print_boxing",
|
||||
AFTER_PRINT_CARTONING = "after_print_cartoning",
|
||||
|
||||
FINISHED = "finished",
|
||||
|
||||
CANCELED = "canceled",
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
import * as api from "../service/OrderService";
|
||||
|
||||
export const useGetOrders = () => {
|
||||
return useQuery({
|
||||
queryKey: ["orders"],
|
||||
queryFn: api.getOrders,
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
import axios from "@/config/axios";
|
||||
import type { OrderResponseType } from "../types/Types";
|
||||
|
||||
export const getOrders = async () => {
|
||||
const { data } = await axios.get<OrderResponseType>(`/admin/orders`);
|
||||
return data;
|
||||
};
|
||||
@@ -0,0 +1,77 @@
|
||||
import type { BaseResponse } from "@/shared/types/Types";
|
||||
import type { OrderStatusEnum } from "../enum/OrderEnum";
|
||||
import type { RowDataType } from "@/components/types/TableTypes";
|
||||
|
||||
export interface OrderType extends RowDataType {
|
||||
id: string;
|
||||
user: UserType;
|
||||
creator: string | null;
|
||||
orderNumber: number;
|
||||
estimatedDays: number | null;
|
||||
status: OrderStatusEnum;
|
||||
paymentMethod: string | null;
|
||||
invoicedAt: string | null;
|
||||
enableTax: boolean;
|
||||
createdAt: string;
|
||||
deletedAt: string | null;
|
||||
items: OrderItem[];
|
||||
discount: string;
|
||||
subTotal: string;
|
||||
taxAmount: string;
|
||||
total: string;
|
||||
paidAmount: string;
|
||||
balance: string;
|
||||
}
|
||||
|
||||
export interface OrderItem {
|
||||
id: string;
|
||||
order: string;
|
||||
product: Product;
|
||||
designer: string | null;
|
||||
attributes: OrderItemAttribute[];
|
||||
quantity: number;
|
||||
unitPrice: string | null;
|
||||
discount: string | null;
|
||||
description: string | null;
|
||||
adminDescription: string | null;
|
||||
attachments: string[];
|
||||
printAttachments: null;
|
||||
printAttributes: null;
|
||||
confirmedAt: string | null;
|
||||
createdAt: string;
|
||||
deletedAt: string | null;
|
||||
subTotal: string;
|
||||
total: string;
|
||||
}
|
||||
|
||||
export interface Product {
|
||||
id: string;
|
||||
createdAt: string;
|
||||
deletedAt: string | null;
|
||||
category: string;
|
||||
title: string;
|
||||
desc: string;
|
||||
quantities: number[];
|
||||
linkUrl: string | null;
|
||||
isActive: boolean;
|
||||
images: string[];
|
||||
order: number;
|
||||
}
|
||||
|
||||
export interface OrderItemAttribute {
|
||||
attributeId: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
export type OrderResponseType = BaseResponse<OrderType[]>;
|
||||
|
||||
export type UserType = {
|
||||
addresse?: string;
|
||||
createdAt: string;
|
||||
firstName?: string;
|
||||
lastName?: string;
|
||||
isActive: boolean;
|
||||
id: string;
|
||||
maxCredit: number;
|
||||
phone: string;
|
||||
};
|
||||
Reference in New Issue
Block a user