diff --git a/frontend/admin-panel/src/pages/B2BManager.tsx b/frontend/admin-panel/src/pages/B2BManager.tsx index af59315..3764bfd 100644 --- a/frontend/admin-panel/src/pages/B2BManager.tsx +++ b/frontend/admin-panel/src/pages/B2BManager.tsx @@ -3,8 +3,13 @@ import { Building2, CheckCircle2, XCircle, Clock, PhoneCall, Filter, X, Plus, Sh import { toast } from 'react-hot-toast'; import api from '../services/api'; import Spinner from '../components/ui/Spinner'; +import Button from '../components/ui/Button'; +import Modal from '../components/ui/Modal'; import type { B2BInquiry, PartnerAccount } from '../types/admin'; + + + export default function B2BManager() { const [activeTab, setActiveTab] = useState<'inquiries' | 'partners'>('inquiries'); @@ -277,12 +282,13 @@ export default function B2BManager() { )} - + )) @@ -296,13 +302,14 @@ export default function B2BManager() {

فهرست حساب‌های تایید شده همکار

- +
@@ -360,21 +367,41 @@ export default function B2BManager() { {/* Inquiry Review Modal */} {selectedInquiry && ( -
-
-
-

- بررسی درخواست B2B ({selectedInquiry.companyName}) -

- + setSelectedInquiry(null)} + title={`بررسی درخواست B2B (${selectedInquiry.companyName})`} + icon={Building2} + maxWidth="lg" + footer={ +
+ +
- -
+ } + > +
+
-
شخص رابط: {selectedInquiry.contactName} ({selectedInquiry.phone})
-
پیام درخواست: {selectedInquiry.message}
+
رابط: {selectedInquiry.contactName}
+
تلفن / ایمیل: {selectedInquiry.phone} - {selectedInquiry.email}
+
نوع کسب‌وکار: {selectedInquiry.businessType}
+ {selectedInquiry.message &&
{selectedInquiry.message}
}
@@ -401,43 +428,43 @@ export default function B2BManager() { className="w-full px-4 py-2.5 rounded-xl border border-gray-200 focus:border-purple-500 outline-none text-sm" />
- -
- - -
-
+ )} {/* Partner Account Setup Modal */} {isPartnerModalOpen && ( -
-
-
-

- تعریف حساب همکار B2B جدید -

- + setIsPartnerModalOpen(false)} + title="تعریف حساب همکار B2B جدید" + icon={Building2} + maxWidth="lg" + footer={ +
+ +
- -
+ } + > +
+
سطح ۳ (۳۵٪ تخفیف)
- -
- - -
-
+ )}
); } + diff --git a/frontend/admin-panel/src/pages/ContactSubmissions.tsx b/frontend/admin-panel/src/pages/ContactSubmissions.tsx index 7dc17ac..7c2b02b 100644 --- a/frontend/admin-panel/src/pages/ContactSubmissions.tsx +++ b/frontend/admin-panel/src/pages/ContactSubmissions.tsx @@ -1,6 +1,10 @@ import React, { useEffect, useState } from 'react'; +import { Mail, MessageSquare } from 'lucide-react'; import toast from 'react-hot-toast'; import api from '../services/api'; +import Button from '../components/ui/Button'; +import Modal from '../components/ui/Modal'; + interface ContactSubmission { id: string; @@ -153,16 +157,17 @@ export default function ContactSubmissions() { - + ))} @@ -220,21 +225,45 @@ export default function ContactSubmissions() {
))} - +
)} {/* Modal for Submission Detail & Status Update */} {selectedSub && ( -
-
-

جزئیات پیام {selectedSub.name}

+ setSelectedSub(null)} + title={`جزئیات پیام ${selectedSub.name}`} + icon={Mail} + maxWidth="lg" + footer={ +
+ + +
+ } + > +
تلفن: {selectedSub.phone}
{selectedSub.email &&
ایمیل: {selectedSub.email}
} @@ -268,24 +297,11 @@ export default function ContactSubmissions() { className="w-full px-3 py-2 border rounded-lg text-sm" />
-
- - -
-
+ )} +
); } diff --git a/frontend/admin-panel/src/pages/DoctorsManager.tsx b/frontend/admin-panel/src/pages/DoctorsManager.tsx index 9880030..dac242d 100644 --- a/frontend/admin-panel/src/pages/DoctorsManager.tsx +++ b/frontend/admin-panel/src/pages/DoctorsManager.tsx @@ -5,6 +5,9 @@ import api, { BASE_DOMAIN } from '../services/api'; import ConfirmModal from '../components/ui/ConfirmModal'; import MediaSelector from '../components/ui/MediaSelector'; import Spinner from '../components/ui/Spinner'; +import Button from '../components/ui/Button'; +import Modal from '../components/ui/Modal'; + export interface Doctor { id: string; @@ -165,13 +168,14 @@ export default function DoctorsManager() { ثبت اطلاعات و رزومه (CV) دامپزشکان جهت انتساب به ویدئوها، مشاوره‌ها و معرفی کادر تخصصی

- + افزودن پزشک جدید + {/* Filter / Search */} @@ -203,13 +207,14 @@ export default function DoctorsManager() {

پزشکی یافت نشد

اولین پزشک یا متخصص کادر علمی را به سامانه اضافه کنید.

- + ) : (
@@ -228,23 +233,23 @@ export default function DoctorsManager() {
- {/* Profile Header */} + {/* Avatar & Main Info */}
-
+
{doc.avatarUrl ? ( ) : ( - + )}
-

{doc.name}

-

{doc.title || 'دامپزشک'}

+

{doc.name}

+

{doc.title || 'پزشک متخصص'}

{doc.clinicName && ( -

{doc.clinicName}

+

+ + {doc.clinicName} +

)}
- {/* Bio snippet */} + {/* Bio Summary */} {doc.bio && ( -

+

{doc.bio}

)} - {/* CV Button */} - {doc.cv && ( - - )} -
- - {/* Footer info */} -
- {doc._count?.videos || 0} ویدئوی آموزشی - {doc.phone && {doc.phone}} + {/* Contact & CV Trigger */} +
+ {doc.phone && ( + + + {doc.phone} + + )} + {doc.instagram && ( + + + {doc.instagram} + + )} + {doc.cv && ( + + )} +
))} )} - {/* Create / Edit Modal */} + {/* Modal Add/Edit */} {isModalOpen && ( -
-
- {/* Modal Header */} -
-
-
- -
-
-

- {editingDoctor ? 'ویرایش اطلاعات پزشک' : 'افزودن پزشک جدید'} -

-

مشخصات هویتی، آواتار و رزومه علمی پزشک

-
-
- + انصراف + +
- - {/* Form */} -
+ } + > +
+
- {/* Name */}
- + setFormData({ ...formData, name: e.target.value })} - className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:border-purple-600" + className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-xs focus:outline-none focus:border-purple-600 font-bold" />
- - {/* Title */}
- + setFormData({ ...formData, title: e.target.value })} - className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:border-purple-600" + className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-xs focus:outline-none focus:border-purple-600 font-bold" />
- {/* Clinic Name */} -
- - setFormData({ ...formData, clinicName: e.target.value })} - className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:border-purple-600" - /> -
- - {/* Avatar Selector */} -
- -
+
+
+ setFormData({ ...formData, clinicName: e.target.value })} + className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-xs focus:outline-none focus:border-purple-600" + /> +
+
+ + setFormData({ ...formData, order: parseInt(e.target.value) || 0 })} + className="w-full px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-xs focus:outline-none focus:border-purple-600 font-bold" + /> +
+
+ + {/* Avatar Picker */} +
+ +
+
+ {formData.avatarUrl ? ( + Avatar preview + ) : ( + + )} +
+ setFormData({ ...formData, avatarUrl: e.target.value })} - className="flex-1 px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-sm focus:outline-none focus:border-purple-600" + className="flex-1 px-4 py-2.5 bg-gray-50 border border-gray-200 rounded-xl text-xs font-mono" + dir="ltr" /> - + گالری رسانه +
- {formData.avatarUrl && ( -
- Preview -
- )}
- {/* Bio */} + {/* Bio & CV */}
- +