change texts

This commit is contained in:
hamid zarghami
2026-02-07 16:22:02 +03:30
parent 6b9e808bfd
commit 2e6fdedbc2
21 changed files with 50 additions and 50 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ const ServiceSection: FC = () => {
دی منو دی منو
</div> </div>
<div className='text-xs text-description'> <div className='text-xs text-description'>
منو رستوران منو فروشگاه
</div> </div>
</div> </div>
</div> </div>
+5 -5
View File
@@ -51,7 +51,7 @@
"menu": "منو", "menu": "منو",
"mainpage": "صفحه اصلی", "mainpage": "صفحه اصلی",
"schedule": "زمان سفارش گیری", "schedule": "زمان سفارش گیری",
"foods": "غذا ها", "foods": "کالا ها",
"orders": "سفارشات", "orders": "سفارشات",
"customers": "مشتریان", "customers": "مشتریان",
"discount": "کد تخفیف", "discount": "کد تخفیف",
@@ -71,7 +71,7 @@
"statistics": "گزارشات" "statistics": "گزارشات"
}, },
"shipment": { "shipment": {
"dineIn": "سرو در رستوران", "dineIn": "سرو در فروشگاه",
"customerPickup": "دریافت از محل", "customerPickup": "دریافت از محل",
"deliveryCar": "تحویل به خودرو", "deliveryCar": "تحویل به خودرو",
"deliveryCourier": "بیرون بر" "deliveryCourier": "بیرون بر"
@@ -93,8 +93,8 @@
"slider_deleted": "اسلایدر با موفقیت حذف شد" "slider_deleted": "اسلایدر با موفقیت حذف شد"
}, },
"submenu": { "submenu": {
"foods_list": "لیست غذا ها", "foods_list": "لیست کالا ها",
"add_food": "افزودن غذا", "add_food": "افزودن کالا",
"categories": "دسته بندی ها", "categories": "دسته بندی ها",
"orders_list": "لیست سفارشات", "orders_list": "لیست سفارشات",
"add_order": "افزودن سفارش", "add_order": "افزودن سفارش",
@@ -236,7 +236,7 @@
"footer": { "footer": {
"home": "صفحه اصلی", "home": "صفحه اصلی",
"customers": "مشتریان", "customers": "مشتریان",
"foods": "غذا ها", "foods": "کالا ها",
"announcements": "اطلاعیه ها", "announcements": "اطلاعیه ها",
"orders": "سفارشات" "orders": "سفارشات"
}, },
+3 -3
View File
@@ -13,7 +13,7 @@ const CommentsDetails: FC = () => {
const [selectedCategories, setSelectedCategories] = useState<string[]>([]) const [selectedCategories, setSelectedCategories] = useState<string[]>([])
const allFoods = ['پیتزا پپرونی', 'سالاد سزار', 'پاستا', 'همبرگر', 'سوشی'] const allFoods = ['پیتزا پپرونی', 'سالاد سزار', 'پاستا', 'همبرگر', 'سوشی']
const allCategories = ['پیش غذا', 'غذای اصلی', 'دسر', 'نوشیدنی', 'سالاد'] const allCategories = ['پیش کالا', 'کالای اصلی', 'دسر', 'نوشیدنی', 'سالاد']
const foods = ['همه', ...allFoods] const foods = ['همه', ...allFoods]
const categories = ['همه', ...allCategories] const categories = ['همه', ...allCategories]
@@ -88,7 +88,7 @@ const CommentsDetails: FC = () => {
</div> </div>
<Input <Input
label='غذا ها' label='کالا ها'
value='پیتزا پپرونی ، سالاد سزار' value='پیتزا پپرونی ، سالاد سزار'
readOnly readOnly
/> />
@@ -123,7 +123,7 @@ const CommentsDetails: FC = () => {
<div className='text-sm mb-4'>وضعیت نمایش</div> <div className='text-sm mb-4'>وضعیت نمایش</div>
<div className='mb-6 border border-border rounded-xl p-4'> <div className='mb-6 border border-border rounded-xl p-4'>
<div className='text-xs mb-3'>نمایش در غذاهای</div> <div className='text-xs mb-3'>نمایش در کالاهای</div>
<Input <Input
// variant='search' // variant='search'
placeholder='جستجو' placeholder='جستجو'
+3 -3
View File
@@ -72,7 +72,7 @@ const CommentsList: FC = () => {
}, },
{ {
key: 'food', key: 'food',
title: 'غذا', title: 'کالا',
}, },
{ {
key: 'date', key: 'date',
@@ -142,7 +142,7 @@ const CommentsList: FC = () => {
number: '۱۲۳۳۷', number: '۱۲۳۳۷',
customerName: 'علی کریمی', customerName: 'علی کریمی',
strengths: 'سرویس سریع', strengths: 'سرویس سریع',
weaknesses: 'کم بودن حجم غذا', weaknesses: 'کم بودن حجم کالا',
food: 'پاستا کربونارا', food: 'پاستا کربونارا',
date: '2024-11-04', date: '2024-11-04',
isDisplayed: true, isDisplayed: true,
@@ -161,7 +161,7 @@ const CommentsList: FC = () => {
id: 6, id: 6,
number: '۱۲۳۳۹', number: '۱۲۳۳۹',
customerName: 'حسن نوری', customerName: 'حسن نوری',
strengths: 'ارزش غذایی مناسب', strengths: 'ارزش کالایی مناسب',
weaknesses: 'بوی نامطبوع', weaknesses: 'بوی نامطبوع',
food: 'کباب ترکی', food: 'کباب ترکی',
date: '2024-11-06', date: '2024-11-06',
+1 -1
View File
@@ -48,7 +48,7 @@ const FoodSelector: FC<FoodSelectorProps> = ({ formik, foods }) => {
return ( return (
<div> <div>
<div className='text-sm mb-3'>غذاهایی که شامل تخفیف میشوند</div> <div className='text-sm mb-3'>کالاهایی که شامل تخفیف میشوند</div>
<div className='mb-6 border border-border rounded-xl p-4'> <div className='mb-6 border border-border rounded-xl p-4'>
<Input <Input
variant='search' variant='search'
+1 -1
View File
@@ -183,7 +183,7 @@ const CategoryFood: FC = () => {
<div className="flex flex-col lg:flex-row gap-4 lg:gap-6 p-4 lg:p-6"> <div className="flex flex-col lg:flex-row gap-4 lg:gap-6 p-4 lg:p-6">
<div className="flex-1 w-full lg:w-auto"> <div className="flex-1 w-full lg:w-auto">
<div className="flex items-center justify-between mb-4 lg:mb-6"> <div className="flex items-center justify-between mb-4 lg:mb-6">
<h1 className="text-base lg:text-lg font-light">دسته بندی غذا</h1> <h1 className="text-base lg:text-lg font-light">دسته بندی کالا</h1>
</div> </div>
<div className="mb-4 lg:mb-0"> <div className="mb-4 lg:mb-0">
<Filters <Filters
+8 -8
View File
@@ -53,7 +53,7 @@ const CreateFood: FC = () => {
order: 0 order: 0
}, },
validationSchema: Yup.object().shape({ validationSchema: Yup.object().shape({
title: Yup.string().required('نام غذا الزامی است'), title: Yup.string().required('نام کالا الزامی است'),
categoryId: Yup.string().required('دسته‌بندی الزامی است'), categoryId: Yup.string().required('دسته‌بندی الزامی است'),
price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'), price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'),
prepareTime: Yup.number().required('زمان آماده‌سازی الزامی است').min(0, 'زمان آماده‌سازی باید مثبت باشد'), prepareTime: Yup.number().required('زمان آماده‌سازی الزامی است').min(0, 'زمان آماده‌سازی باید مثبت باشد'),
@@ -75,11 +75,11 @@ const CreateFood: FC = () => {
createFood(foodData, { createFood(foodData, {
onSuccess: () => { onSuccess: () => {
toast.success('غذا با موفقیت ایجاد شد') toast.success('کالا با موفقیت ایجاد شد')
window.location.href = Pages.foods.list window.location.href = Pages.foods.list
}, },
onError: (error: ErrorType) => { onError: (error: ErrorType) => {
toast.error(error?.response?.data?.error?.message[0] || 'خطا در ایجاد غذا') toast.error(error?.response?.data?.error?.message[0] || 'خطا در ایجاد کالا')
} }
}) })
} }
@@ -104,7 +104,7 @@ const CreateFood: FC = () => {
<div className='w-full mt-4'> <div className='w-full mt-4'>
<div className='flex flex-col sm:flex-row w-full justify-between items-start sm:items-center gap-4'> <div className='flex flex-col sm:flex-row w-full justify-between items-start sm:items-center gap-4'>
<div className='text-lg font-light'> <div className='text-lg font-light'>
غذای جدید کالای جدید
</div> </div>
<div> <div>
<Button <Button
@@ -114,7 +114,7 @@ const CreateFood: FC = () => {
> >
<div className='flex gap-2 items-center'> <div className='flex gap-2 items-center'>
<TickCircle className='size-5' color='white' /> <TickCircle className='size-5' color='white' />
<div>ثبت غذا</div> <div>ثبت کالا</div>
</div> </div>
</Button> </Button>
</div> </div>
@@ -124,7 +124,7 @@ const CreateFood: FC = () => {
<div className='flex-1'> <div className='flex-1'>
<div className='bg-white py-6 sm:py-8 xl:px-10 px-4 rounded-3xl'> <div className='bg-white py-6 sm:py-8 xl:px-10 px-4 rounded-3xl'>
<Input <Input
label='نام غذا' label='نام کالا'
name='title' name='title'
placeholder='' placeholder=''
value={formik.values.title} value={formik.values.title}
@@ -195,7 +195,7 @@ const CreateFood: FC = () => {
<div className='mt-5'> <div className='mt-5'>
<Textarea <Textarea
name='desc' name='desc'
label='توضیحات غذا' label='توضیحات کالا'
placeholder='' placeholder=''
value={formik.values.desc} value={formik.values.desc}
onChange={formik.handleChange} onChange={formik.handleChange}
@@ -216,7 +216,7 @@ const CreateFood: FC = () => {
</div> </div>
<div className='mt-5'> <div className='mt-5'>
<div className='text-sm mb-2'>محتوای غذا</div> <div className='text-sm mb-2'>محتوای کالا</div>
<div className='space-y-2'> <div className='space-y-2'>
{formik.values.content.map((item, index) => ( {formik.values.content.map((item, index) => (
<div key={index} className='flex gap-2 items-center'> <div key={index} className='flex gap-2 items-center'>
+2 -2
View File
@@ -36,14 +36,14 @@ const FoodsList: FC = () => {
return ( return (
<div className='mt-5'> <div className='mt-5'>
<div className='flex justify-between items-center'> <div className='flex justify-between items-center'>
<h1 className='text-lg font-light'>لیست غذاها</h1> <h1 className='text-lg font-light'>لیست کالاها</h1>
<Link <Link
to={Pages.foods.add} to={Pages.foods.add}
> >
<Button className='w-fit px-6'> <Button className='w-fit px-6'>
<div className='flex gap-2 items-center'> <div className='flex gap-2 items-center'>
<Add color='#fff' size={20} /> <Add color='#fff' size={20} />
<span>افزودن غذا</span> <span>افزودن کالا</span>
</div> </div>
</Button> </Button>
</Link> </Link>
+5 -5
View File
@@ -56,7 +56,7 @@ const UpdateFood: FC = () => {
order: 0 order: 0
}, },
validationSchema: Yup.object().shape({ validationSchema: Yup.object().shape({
title: Yup.string().required('نام غذا الزامی است'), title: Yup.string().required('نام کالا الزامی است'),
categoryId: Yup.string().required('دسته‌بندی الزامی است'), categoryId: Yup.string().required('دسته‌بندی الزامی است'),
price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'), price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'),
prepareTime: Yup.number().required('زمان آماده‌سازی الزامی است').min(0, 'زمان آماده‌سازی باید مثبت باشد'), prepareTime: Yup.number().required('زمان آماده‌سازی الزامی است').min(0, 'زمان آماده‌سازی باید مثبت باشد'),
@@ -68,7 +68,7 @@ const UpdateFood: FC = () => {
}), }),
onSubmit: (values) => { onSubmit: (values) => {
if (!id) { if (!id) {
toast.error('شناسه غذا یافت نشد') toast.error('شناسه کالا یافت نشد')
return return
} }
@@ -84,7 +84,7 @@ const UpdateFood: FC = () => {
updateFood({ id, params: foodData }, { updateFood({ id, params: foodData }, {
onSuccess: () => { onSuccess: () => {
toast.success('غذا با موفقیت به‌روزرسانی شد') toast.success('کالا با موفقیت به‌روزرسانی شد')
navigate(Pages.foods.list) navigate(Pages.foods.list)
}, },
onError: (error: ErrorType) => { onError: (error: ErrorType) => {
@@ -152,7 +152,7 @@ const UpdateFood: FC = () => {
if (!food) { if (!food) {
return ( return (
<div className='w-full mt-4 flex justify-center items-center'> <div className='w-full mt-4 flex justify-center items-center'>
<div>غذا یافت نشد</div> <div>کالا یافت نشد</div>
</div> </div>
) )
} }
@@ -161,7 +161,7 @@ const UpdateFood: FC = () => {
<div className='w-full mt-4'> <div className='w-full mt-4'>
<div className='flex flex-col sm:flex-row w-full justify-between items-start sm:items-center gap-4'> <div className='flex flex-col sm:flex-row w-full justify-between items-start sm:items-center gap-4'>
<div className='text-lg font-light'> <div className='text-lg font-light'>
ویرایش غذا ویرایش کالا
</div> </div>
<div> <div>
<Button <Button
@@ -14,7 +14,7 @@ const BasicInfoSection: FC<BasicInfoSectionProps> = ({ formik, categories }) =>
return ( return (
<> <>
<Input <Input
label='نام غذا' label='نام کالا'
name='title' name='title'
placeholder='' placeholder=''
value={formik.values.title} value={formik.values.title}
@@ -85,7 +85,7 @@ const BasicInfoSection: FC<BasicInfoSectionProps> = ({ formik, categories }) =>
<div className='mt-5'> <div className='mt-5'>
<Textarea <Textarea
name='desc' name='desc'
label='توضیحات غذا' label='توضیحات کالا'
placeholder='' placeholder=''
value={formik.values.desc} value={formik.values.desc}
onChange={formik.handleChange} onChange={formik.handleChange}
@@ -19,7 +19,7 @@ const CreateFoodSidebar: FC<Props> = (props: Props) => {
<div> <div>
<div className='flex items-center justify-between'> <div className='flex items-center justify-between'>
<div>وضعیت غذا</div> <div>وضعیت کالا</div>
<SwitchComponent <SwitchComponent
active={props.isActive} active={props.isActive}
onChange={(value) => props.onChangeActive(value)} onChange={(value) => props.onChangeActive(value)}
@@ -34,15 +34,15 @@ const CreateFoodSidebar: FC<Props> = (props: Props) => {
onCheckedChange={(checked) => props.onChangeSpecial(checked as boolean)} onCheckedChange={(checked) => props.onChangeSpecial(checked as boolean)}
/> />
<label className='text-xs leading-tight cursor-pointer'> <label className='text-xs leading-tight cursor-pointer'>
این غذا پیشنهاد ویژه رستوران هست. این کالا پیشنهاد ویژه فروشگاه هست.
</label> </label>
</div> </div>
</div> </div>
<div className='mt-8'> <div className='mt-8'>
<div className='text-sm mb-2'>تصاویر غذا</div> <div className='text-sm mb-2'>تصاویر کالا</div>
<UploadBoxDraggble <UploadBoxDraggble
label='تصویر غذا را آپلود کنید' label='تصویر کالا را آپلود کنید'
isMultiple={true} isMultiple={true}
onChange={(files: File[]) => props.onChangeImages(files)} onChange={(files: File[]) => props.onChangeImages(files)}
preview={props.existingImages} preview={props.existingImages}
@@ -12,7 +12,7 @@ const FoodContentSection: FC<FoodContentSectionProps> = ({ formik }) => {
return ( return (
<div className='mt-5'> <div className='mt-5'>
<div className='text-sm mb-2'>محتوای غذا</div> <div className='text-sm mb-2'>محتوای کالا</div>
<div className='space-y-2'> <div className='space-y-2'>
{formik.values.content.map((item, index) => ( {formik.values.content.map((item, index) => (
<div key={index} className='flex gap-2 items-center'> <div key={index} className='flex gap-2 items-center'>
@@ -35,7 +35,7 @@ export const getFoodTableColumns = ({ onDelete, isDeleting }: GetFoodTableColumn
}, },
{ {
key: 'title', key: 'title',
title: 'نام غذا', title: 'نام کالا',
}, },
{ {
key: 'categories', key: 'categories',
@@ -28,7 +28,7 @@ const MealTimesSection: FC<MealTimesSectionProps> = ({ formik }) => {
return ( return (
<div className='mt-6'> <div className='mt-6'>
<div className='text-sm mb-3'>وعدههای غذایی</div> <div className='text-sm mb-3'>وعدههای کالایی</div>
<div className='text-xs text-gray-500 mb-3 bg-gray-50 p-3 rounded-lg border border-gray-200'> <div className='text-xs text-gray-500 mb-3 bg-gray-50 p-3 rounded-lg border border-gray-200'>
<div>ساعات 6 تا 11 صبح :صبحانه</div> <div>ساعات 6 تا 11 صبح :صبحانه</div>
<div>11 تا 15 ناهار</div> <div>11 تا 15 ناهار</div>
+1 -1
View File
@@ -22,7 +22,7 @@ const PaymentInfo: FC<PaymentInfoProps> = ({
const getDeliveryMethodText = (method: string): string => { const getDeliveryMethodText = (method: string): string => {
const methodMap: Record<string, string> = { const methodMap: Record<string, string> = {
[DeliveryMethodEnum.DineIn]: 'سرو در رستوران', [DeliveryMethodEnum.DineIn]: 'سرو در فروشگاه',
[DeliveryMethodEnum.CustomerPickup]: 'دریافت از محل', [DeliveryMethodEnum.CustomerPickup]: 'دریافت از محل',
[DeliveryMethodEnum.DeliveryCar]: 'تحویل به خودرو', [DeliveryMethodEnum.DeliveryCar]: 'تحویل به خودرو',
[DeliveryMethodEnum.DeliveryCourier]: 'بیرون بر', [DeliveryMethodEnum.DeliveryCourier]: 'بیرون بر',
+5 -5
View File
@@ -173,11 +173,11 @@ const DetailReview: FC = () => {
<div className='pt-6 border-t border-border'> <div className='pt-6 border-t border-border'>
<div className='flex items-center gap-2 mb-4'> <div className='flex items-center gap-2 mb-4'>
<ShoppingCart size={20} color="#8C90A3" /> <ShoppingCart size={20} color="#8C90A3" />
<span className='text-sm font-medium'>اطلاعات غذا</span> <span className='text-sm font-medium'>اطلاعات کالا</span>
</div> </div>
<div className='grid grid-cols-2 gap-4'> <div className='grid grid-cols-2 gap-4'>
<Input <Input
label='عنوان غذا' label='عنوان کالا'
value={review.food.title} value={review.food.title}
readOnly readOnly
/> />
@@ -187,7 +187,7 @@ const DetailReview: FC = () => {
readOnly readOnly
/> />
<Input <Input
label='امتیاز غذا' label='امتیاز کالا'
value={formatFaNumber(review.food.rate)} value={formatFaNumber(review.food.rate)}
readOnly readOnly
/> />
@@ -199,13 +199,13 @@ const DetailReview: FC = () => {
</div> </div>
{review.food.images && review.food.images.length > 0 && ( {review.food.images && review.food.images.length > 0 && (
<div className='mt-4'> <div className='mt-4'>
<span className='text-sm mb-2 block'>تصاویر غذا</span> <span className='text-sm mb-2 block'>تصاویر کالا</span>
<div className='flex gap-3 flex-wrap'> <div className='flex gap-3 flex-wrap'>
{review.food.images.map((image, index) => ( {review.food.images.map((image, index) => (
<img <img
key={index} key={index}
src={image} src={image}
alt={`غذا ${index + 1}`} alt={`کالا ${index + 1}`}
className='w-24 h-24 object-cover rounded-xl border border-border' className='w-24 h-24 object-cover rounded-xl border border-border'
/> />
))} ))}
@@ -6,7 +6,7 @@ export const useReviewFiltersFields = (): FieldType[] => {
{ {
type: 'input', type: 'input',
name: 'search', name: 'search',
placeholder: 'جستجو (نام کاربر یا غذا)', placeholder: 'جستجو (نام کاربر یا کالا)',
}, },
], []) ], [])
} }
@@ -27,7 +27,7 @@ export const getReviewTableColumns = (): ColumnType<Review>[] => {
}, },
{ {
key: 'food', key: 'food',
title: 'غذا', title: 'کالا',
render: (item: Review) => { render: (item: Review) => {
return item.food.title || '-' return item.food.title || '-'
} }
+2 -2
View File
@@ -19,7 +19,7 @@ import { extractErrorMessage } from '@/config/func'
import ServiceAreaPicker from './components/ServiceAreaPicker' import ServiceAreaPicker from './components/ServiceAreaPicker'
const validationSchema = yup.object({ const validationSchema = yup.object({
name: yup.string().required('نام رستوران الزامی است'), name: yup.string().required('نام فروشگاه الزامی است'),
menuColor: yup.string().required('رنگ منو الزامی است'), menuColor: yup.string().required('رنگ منو الزامی است'),
phone: yup.string().required('شماره تماس الزامی است'), phone: yup.string().required('شماره تماس الزامی است'),
instagram: yup.string().url('لینک اینستاگرام معتبر نیست').nullable(), instagram: yup.string().url('لینک اینستاگرام معتبر نیست').nullable(),
@@ -123,7 +123,7 @@ const GeneralSettings: FC = () => {
<form onSubmit={formik.handleSubmit}> <form onSubmit={formik.handleSubmit}>
<div className='mt-8 rowTwoInput'> <div className='mt-8 rowTwoInput'>
<Input <Input
label='نام رستوران' label='نام فروشگاه'
name='name' name='name'
value={formik.values.name} value={formik.values.name}
onChange={formik.handleChange} onChange={formik.handleChange}
+1 -1
View File
@@ -27,7 +27,7 @@ const Statistics: FC = () => {
<div className='grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-6'> <div className='grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-6'>
<StatCard <StatCard
icon={<Category size={24} color='#6B7FED' />} icon={<Category size={24} color='#6B7FED' />}
title='غذاها' title='کالاها'
value={`${formatFaNumber(stats?.activeFoods)} عددی`} value={`${formatFaNumber(stats?.activeFoods)} عددی`}
color='#6B7FED' color='#6B7FED'
/> />
@@ -43,7 +43,7 @@ const FoodSalesChart: FC = () => {
return ( return (
<div className='bg-white h-fit rounded-3xl p-6 shadow-sm'> <div className='bg-white h-fit rounded-3xl p-6 shadow-sm'>
<h3 className='text-base font-medium mb-6'>میزان فروش غذاها</h3> <h3 className='text-base font-medium mb-6'>میزان فروش کالاها</h3>
{/* Filters */} {/* Filters */}
{/* <div className='flex items-end gap-2 mb-4'> {/* <div className='flex items-end gap-2 mb-4'>