From a68323d3eeb90d7431a5f98b6a30e8b8403a0aff Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 27 Oct 2025 12:36:00 +0330 Subject: [PATCH] optional variant --- .../products/components/CreateVariant.tsx | 72 +++++++++++++++++- .../products/components/UpdateVariant.tsx | 75 +++++++++++-------- src/pages/products/types/Types.ts | 11 ++- 3 files changed, 117 insertions(+), 41 deletions(-) diff --git a/src/pages/products/components/CreateVariant.tsx b/src/pages/products/components/CreateVariant.tsx index 5046982..333f692 100644 --- a/src/pages/products/components/CreateVariant.tsx +++ b/src/pages/products/components/CreateVariant.tsx @@ -2,6 +2,7 @@ import Button from '@/components/Button' import DefaulModal from '@/components/DefaulModal' import Input from '@/components/Input' import Select from '@/components/Select' +import DatePickerComponent from '@/components/DatePicker' import { useState, type FC } from 'react' import { useParams } from 'react-router-dom' import { useCreateProductVariant, useGetProductById, useGetProductVariants } from '../hooks/useProductData' @@ -44,28 +45,34 @@ const CreateVariant: FC = () => { : Yup.string().required('انتخاب تنوع الزامی است'), warrantyId: Yup.string().required('انتخاب گارانتی الزامی است'), order_limit: Yup.number().required('محدودیت سفارش الزامی است').min(1, 'حداقل ۱ عدد'), - sellerSpecialCode: Yup.string().required('کد ویژه فروشنده الزامی است'), + sellerSpecialCode: Yup.string(), retail_price: Yup.number().required('قیمت فروش الزامی است').min(0, 'قیمت نمی‌تواند منفی باشد'), package_weight: Yup.number().required('وزن بسته الزامی است').min(0.1, 'وزن باید حداقل ۰.۱ کیلوگرم باشد'), package_height: Yup.number().required('ارتفاع بسته الزامی است').min(1, 'ارتفاع باید حداقل ۱ سانتی‌متر باشد'), package_length: Yup.number().required('طول بسته الزامی است').min(1, 'طول باید حداقل ۱ سانتی‌متر باشد'), package_width: Yup.number().required('عرض بسته الزامی است').min(1, 'عرض باید حداقل ۱ سانتی‌متر باشد'), postingTime: Yup.number().required('زمان ارسال الزامی است').min(1, 'زمان ارسال باید حداقل ۱ روز باشد'), - stock: Yup.number().required('موجودی انبار الزامی است').min(0, 'موجودی نمی‌تواند منفی باشد') + stock: Yup.number().required('موجودی انبار الزامی است').min(0, 'موجودی نمی‌تواند منفی باشد'), + specialSale_order_limit: Yup.number().min(0, 'محدودیت فروش ویژه نمی‌تواند منفی باشد'), + specialSale_quantity: Yup.number().min(0, 'تعداد فروش ویژه نمی‌تواند منفی باشد'), + specialSale_endDate: Yup.string() }) const initialValues = { variantId: '', warrantyId: '', order_limit: '', - sellerSpecialCode: '', + sellerSpecialCode: '' as string | undefined, retail_price: '', package_weight: '', package_height: '', package_length: '', package_width: '', postingTime: '', - stock: '' + stock: '', + specialSale_order_limit: '', + specialSale_quantity: '', + specialSale_endDate: '' } const getVariantOptions = () => { @@ -138,6 +145,15 @@ const CreateVariant: FC = () => { variantData = baseData } + if (!values.sellerSpecialCode) { + variantData.sellerSpecialCode = undefined + } + + // اضافه کردن فیلدهای فروش ویژه - اگر خالی بودند undefined ارسال شوند + variantData.specialSale_order_limit = values.specialSale_order_limit ? parseInt(values.specialSale_order_limit) : undefined + variantData.specialSale_quantity = values.specialSale_quantity ? parseInt(values.specialSale_quantity) : undefined + variantData.specialSale_endDate = values.specialSale_endDate || undefined + createProductVariant.mutate(variantData, { onSuccess: () => { setShowModal(false) @@ -390,6 +406,54 @@ const CreateVariant: FC = () => { + {/* اطلاعات فروش ویژه */} +
+

فروش ویژه (اختیاری)

+
+
+ + {({ field }: FormikFieldProps) => ( + ) => setFieldValue('specialSale_order_limit', e.target.value)} + /> + )} + + +
+ +
+ + {({ field }: FormikFieldProps) => ( + ) => setFieldValue('specialSale_quantity', e.target.value)} + /> + )} + + +
+
+ +
+ setFieldValue('specialSale_endDate', date)} + /> + +
+
+ {/* دکمه‌ها */}
-
- - {({ field, form }: FormikFieldProps) => ( - ) => setFieldValue('discount_value', e.target.value)} - /> - )} - - -
+ {values.discount_type && ( +
+ + {({ field, form }: FormikFieldProps) => ( + ) => setFieldValue('discount_value', e.target.value)} + /> + )} + + +
+ )} {/* اطلاعات فروش ویژه */}
diff --git a/src/pages/products/types/Types.ts b/src/pages/products/types/Types.ts index 7ab4a85..d559929 100644 --- a/src/pages/products/types/Types.ts +++ b/src/pages/products/types/Types.ts @@ -270,7 +270,7 @@ export type CreateProductVariantRequestType = { meterageId?: number; warrantyId: number; order_limit: number; - sellerSpecialCode: string; + sellerSpecialCode?: string; retail_price: number; package_weight: number; package_height: number; @@ -278,6 +278,9 @@ export type CreateProductVariantRequestType = { package_width: number; postingTime: number; stock: number; + specialSale_order_limit?: number; + specialSale_quantity?: number; + specialSale_endDate?: string; }; export type CreateProductVariantResponseType = { @@ -389,9 +392,9 @@ export type UpdateVariantRequestType = { discount_type: "fixed" | "percent"; discount_value?: number; discount_percent?: number; - specialSale_order_limit: number; - specialSale_quantity: number; - specialSale_endDate: string; + specialSale_order_limit?: number; + specialSale_quantity?: number; + specialSale_endDate?: string; }; export type UpdateVariantResponseType = {