ticket fix

This commit is contained in:
hamid zarghami
2026-02-03 09:53:43 +03:30
parent 8dbfcdad53
commit 4c0041db17
5 changed files with 26 additions and 23 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
VITE_TOKEN_NAME = 'negareh_t' VITE_TOKEN_NAME = 'negareh_t'
VITE_REFRESH_TOKEN_NAME = 'negareh_rt' VITE_REFRESH_TOKEN_NAME = 'negareh_rt'
VITE_API_BASE_URL = 'http://10.24.161.1:4000' VITE_API_BASE_URL = 'http://192.168.99.218:4000'
+1 -14
View File
@@ -9,23 +9,10 @@ const OrderDetail: FC = () => {
const { id } = useParams() const { id } = useParams()
const { data } = useGetOrderDetails(id!) const { data } = useGetOrderDetails(id!)
const orderData = {
orderId: '۱۲۲۴۵',
title: 'شاپینگ بک',
designer: 'عباس حسینی',
quantity: '۱۰۰',
estimatedDate: '۱۴۰۵/۰۶/۰۶/۱۳',
description: 'لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاق...'
}
return ( return (
<div className="w-full min-h-screen bg-[#eceef6] p-6"> <div className="w-full min-h-screen bg-[#eceef6] p-6">
{/* Header Section */} {/* Header Section */}
<div className="flex items-start justify-between mb-6"> <div className="flex items-start justify-between mb-6">
<div className="text-sm text-[#8C90A3]"> <div className="text-sm text-[#8C90A3]">
سفارش #{data?.data?.orderNumber} سفارش #{data?.data?.orderNumber}
</div> </div>
@@ -60,7 +47,7 @@ const OrderDetail: FC = () => {
</div> </div>
<div className='flex items-center gap-2'> <div className='flex items-center gap-2'>
<div className="text-xs text-desc">نام طرح:</div> <div className="text-xs text-desc">نام طرح:</div>
<div className="text-sm font-medium text-black">{orderData.designer}</div> <div className="text-sm font-medium text-black">{'orderData.designer'}</div>
</div> </div>
<div className='flex items-center gap-2'> <div className='flex items-center gap-2'>
<div className="text-xs text-desc">تعداد:</div> <div className="text-xs text-desc">تعداد:</div>
+19 -4
View File
@@ -7,21 +7,24 @@ import { useVoiceRecorder } from '@/hooks/useVoiceRecorder'
import { Play, Pause } from 'iconsax-react' import { Play, Pause } from 'iconsax-react'
import { useMultiUpload, useSingleUpload } from '@/pages/uploader/hooks/useUploader' import { useMultiUpload, useSingleUpload } from '@/pages/uploader/hooks/useUploader'
import type { AddTicketType } from '../type/Types' import type { AddTicketType } from '../type/Types'
import { useAddTicket, useGetTickets } from '../hooks/useOrderData' import { useAddTicket, useGetOrderDetails, useGetTickets } from '../hooks/useOrderData'
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
import { toast } from '@/shared/toast' import { toast } from '@/shared/toast'
import { extractErrorMessage, getFileNameAndExtensionFromUrl } from '@/config/func' import { extractErrorMessage, getFileNameAndExtensionFromUrl } from '@/config/func'
import VoicePlayer from '@/components/VoicePlayer' import VoicePlayer from '@/components/VoicePlayer'
import Select from '@/components/Select'
const TicketSection: FC = () => { const TicketSection: FC = () => {
const { id } = useParams() const { id } = useParams()
const { data: order } = useGetOrderDetails(id!)
const [itemId, setItemId] = useState<string>('')
const [message, setMessage] = useState('') const [message, setMessage] = useState('')
const [files, setFiles] = useState<File[]>([]) const [files, setFiles] = useState<File[]>([])
const addTicket = useAddTicket() const addTicket = useAddTicket()
const { data, refetch } = useGetTickets(id!) const { data, refetch } = useGetTickets(itemId)
const singleUpload = useSingleUpload() const singleUpload = useSingleUpload()
const multiUpload = useMultiUpload() const multiUpload = useMultiUpload()
@@ -66,7 +69,7 @@ const TicketSection: FC = () => {
}) })
} }
addTicket.mutate({ orderId: id!, params: params }, { addTicket.mutate({ orderId: itemId, params: params }, {
onSuccess: () => { onSuccess: () => {
toast('پیام شما با موفقیت ارسال شد') toast('پیام شما با موفقیت ارسال شد')
refetch() refetch()
@@ -90,12 +93,24 @@ const TicketSection: FC = () => {
return ( return (
<div className="bg-white rounded-2xl p-6"> <div className="bg-white rounded-2xl p-6">
{/* Designer Name */} {/* Designer Name */}
<div className="mt-6"> <div className="mt-6 rowTwoInput">
<Input <Input
label="نام طراح" label="نام طراح"
placeholder="عباس حسینی" placeholder="عباس حسینی"
readOnly readOnly
/> />
<Select
items={order?.data?.items?.map((item) => {
return {
label: item.product?.title,
value: item.id + ''
}
}) || []}
onChange={(e) => setItemId(e.target.value)}
label='انتخاب محصول'
placeholder='انتخاب'
/>
</div> </div>
{ {
data?.data?.map((item) => { data?.data?.map((item) => {
+4 -4
View File
@@ -67,14 +67,14 @@ export const getOrderDetails = async (id: string) => {
return data; return data;
}; };
export const getTickets = async (orderId: string) => { export const getTickets = async (id: string) => {
const { data } = await axios.get<TicketsResponseType>( const { data } = await axios.get<TicketsResponseType>(
`/public/ticket/order/${orderId}` `/public/ticket/order/item/${id}`
); );
return data; return data;
}; };
export const addTicket = async (orderId: string, params: AddTicketType) => { export const addTicket = async (id: string, params: AddTicketType) => {
const { data } = await axios.post(`/public/ticket/order/${orderId}`, params); const { data } = await axios.post(`/public/ticket/order/item/${id}`, params);
return data; return data;
}; };
+1
View File
@@ -82,6 +82,7 @@ export interface MyOrderType extends RowDataType {
total: number; total: number;
items: { items: {
adminDescription?: string; adminDescription?: string;
id: number;
attachments: { attachments: {
type: string; type: string;
url: string; url: string;