+
+
+
+ توصیه و نظر پزشک متخصص (Specialist Endorsement)
+
+ {formData.specialist?.name && (
+
+ )}
+
+
+ در صورت تکمیل این بخش، کادر نظر و توصیه بالینی پزشک در کاتالوگ و صفحه محصول نمایش داده میشود. در صورت خالی ماندن، هیچ کادری نمایش داده نخواهد شد.
+
+
+
+
+
+ setFormData({
+ ...formData,
+ specialist: { ...(formData.specialist || { name: '', title: '', image: '', message: '' }), name: e.target.value }
+ })}
+ placeholder="مثال: دکتر علیرضا رضایی یا Dr. Klaus Henning"
+ className="w-full px-3 py-2 rounded-xl border border-gray-200 focus:border-purple-500 outline-none text-xs font-bold font-vazir"
+ />
+
+
+
+
+ setFormData({
+ ...formData,
+ specialist: { ...(formData.specialist || { name: '', title: '', image: '', message: '' }), title: e.target.value }
+ })}
+ placeholder="مثال: متخصص جراحی استخوان و مفاصل دامپزشکی"
+ className="w-full px-3 py-2 rounded-xl border border-gray-200 focus:border-purple-500 outline-none text-xs font-bold font-vazir"
+ />
+
+
+
+
+
+
+ setFormData({
+ ...formData,
+ specialist: { ...(formData.specialist || { name: '', title: '', image: '', message: '' }), image: e.target.value }
+ })}
+ placeholder="آدرس تصویر یا انتخاب از رسانهها (/uploads/doctor.jpg)"
+ className="flex-1 px-3 py-2 rounded-xl border border-gray-200 focus:border-purple-500 outline-none text-xs font-mono"
+ dir="ltr"
+ />
+
+
+
+
+
+
+
+
{/* Benefits & Analysis Tab */}
@@ -4030,6 +4151,14 @@ export default function Products() {
if (!formData.images.includes(url)) {
setFormData({ ...formData, images: [...formData.images, url] });
}
+ } else if (mediaTargetField === 'specialistImage') {
+ setFormData({
+ ...formData,
+ specialist: {
+ ...(formData.specialist || { name: '', title: '', image: '', message: '' }),
+ image: url,
+ }
+ });
} else {
setFormData({ ...formData, [mediaTargetField]: url });
if (mediaTargetField === 'imageUrl') setMediaImageError(false);
@@ -4038,9 +4167,11 @@ export default function Products() {
selectedUrl={
(mediaTargetField as string) === 'gallery'
? undefined
- : formData[mediaTargetField]?.startsWith('http')
- ? formData[mediaTargetField]
- : formData[mediaTargetField]
+ : mediaTargetField === 'specialistImage'
+ ? (formData.specialist?.image?.startsWith('http') ? formData.specialist?.image : formData.specialist?.image ? `${BASE_DOMAIN}${formData.specialist?.image}` : undefined)
+ : (formData[mediaTargetField] as string)?.startsWith('http')
+ ? (formData[mediaTargetField] as string)
+ : (formData[mediaTargetField] as string)
? `${BASE_DOMAIN}${formData[mediaTargetField]}`
: undefined
}
diff --git a/frontend/application/app/catalog/CatalogClient.tsx b/frontend/application/app/catalog/CatalogClient.tsx
index 77393b7..f964a55 100644
--- a/frontend/application/app/catalog/CatalogClient.tsx
+++ b/frontend/application/app/catalog/CatalogClient.tsx
@@ -3,7 +3,7 @@
import React, { useState, useEffect } from "react";
import FlipbookCatalog from "../../components/catalog/FlipbookCatalog";
import { productService } from "../../lib/services/productService";
-import { Product, PRODUCTS } from "../../lib/data/products";
+import { Product } from "../../lib/data/products";
export default function CatalogClient() {
const [products, setProducts] = useState