# Admin Panel — User Flow (React) --- ## 1. Authentication ``` [Login Page] │ ├─► Enter mobile number ├─► Enter password └─► Submit │ ├─ Success ──► Store JWT + Refresh Token ──► Redirect to Dashboard └─ Fail ─────► Show error message ``` **Pages:** `/login` **API:** `POST /api/v1/user/login` --- ## 2. Dashboard (صفحه اصلی) ``` [Dashboard] ├─► آمار کلی │ ├─ تعداد کل کاربران │ ├─ تعداد پزشکان فعال │ ├─ تعداد کلینیک‌ها │ ├─ نوبت‌های امروز │ ├─ پرداخت‌های امروز (مبلغ) │ ├─ تعداد نظرات در انتظار تأیید │ └─ تعداد درخواست‌های تسویه‌حساب │ ├─► فعالیت‌های اخیر │ ├─ آخرین نوبت‌های ثبت‌شده │ ├─ آخرین پرداخت‌ها │ └─ آخرین کاربران ثبت‌نام‌شده │ └─► نمودارها ├─ درآمد ماهانه (Jalali) └─ آمار نوبت‌ها به تفکیک وضعیت ``` **Pages:** `/admin/dashboard` --- ## 3. مدیریت کاربران (User Management) ``` [لیست کاربران] ├─► جستجو (mobile, name, email) ├─► فیلتر بر اساس role / status ├─► صفحه‌بندی │ ├─── ردیف کاربر ──► │ ├─ مشاهده جزئیات ──► [صفحه پروفایل کاربر] │ │ ├─ اطلاعات پایه (نام، موبایل، ایمیل، نقش) │ │ ├─ پروفایل پزشکی (گروه خونی، بیماری‌ها، ...) │ │ ├─ تاریخچه نوبت‌ها │ │ └─ تاریخچه پرداخت‌ها │ │ │ ├─ ویرایش اطلاعات پایه │ ├─ تغییر وضعیت (فعال / غیرفعال) │ └─ حذف کاربر ──► [Confirm Dialog] │ └─── دکمه «افزودن کاربر» ──► [فرم ثبت کاربر جدید] ``` **Pages:** `/admin/users`, `/admin/users/:uuid` **API:** - `GET /api/v1/users` (لیست) - `PATCH /api/v1/user/:id` (ویرایش) - `DELETE /api/v1/user/:id` (حذف) - `GET /api/v1/user-profile/:uuid` (پروفایل) --- ## 4. مدیریت پزشکان (Doctor Management) ``` [لیست پزشکان] ├─► فیلتر: استان / شهر / تخصص / جنسیت / درجه / وضعیت فعال ├─► جستجو: نام / کد نظام پزشکی │ ├─── ردیف پزشک ──► │ ├─ مشاهده پروفایل ──► [صفحه پزشک] │ │ ├─ اطلاعات پایه + تصویر │ │ ├─ آدرس مطب‌ها (لیست + نقشه) │ │ ├─ تخصص‌ها و خدمات │ │ ├─ بیمه‌های پذیرفته‌شده │ │ ├─ منشی‌ها │ │ ├─ میانگین امتیاز (5 شاخص) │ │ └─ آمار نوبت‌ها │ │ │ ├─ ویرایش پروفایل │ ├─ فعال/غیرفعال کردن │ └─ حذف ──► [Confirm Dialog] │ └─── دکمه «افزودن پزشک» ``` **Pages:** `/admin/doctors`, `/admin/doctors/:uuid` **API:** - `GET /api/v1/doctors` - `POST /api/v1/doctor` - `PATCH /api/v1/doctor/:uuid` - `DELETE /api/v1/doctor/:uuid` --- ## 5. مدیریت کلینیک‌ها (Clinic Management) ``` [لیست کلینیک‌ها] ├─► فیلتر: استان / شهر / تخصص │ ├─── ردیف کلینیک ──► │ ├─ مشاهده ──► [صفحه کلینیک] │ │ ├─ اطلاعات + لوگو + گالری تصاویر │ │ ├─ ساعات کاری │ │ ├─ پزشکان عضو │ │ ├─ بیمه‌های پذیرفته‌شده │ │ └─ موقعیت روی نقشه │ │ │ ├─ ویرایش │ ├─ فعال/غیرفعال کردن │ └─ حذف ──► [Confirm Dialog] │ └─── دکمه «افزودن کلینیک» ``` **Pages:** `/admin/clinics`, `/admin/clinics/:uuid` --- ## 6. مدیریت نوبت‌ها (Appointment Management) ``` [لیست نوبت‌ها] ├─► فیلتر: تاریخ / پزشک / وضعیت / نماینده ├─► جستجو: موبایل بیمار / نام پزشک │ ├─── ردیف نوبت ──► │ ├─ مشاهده جزئیات ──► [صفحه نوبت] │ │ ├─ اطلاعات بیمار │ │ ├─ اطلاعات پزشک + آدرس │ │ ├─ زمان نوبت │ │ ├─ وضعیت (با رنگ‌بندی) │ │ └─ اطلاعات پرداخت │ │ │ ├─ تغییر وضعیت (dropdown کامل همه state‌ها) │ └─ لغو نوبت ──► [Confirm + دلیل اختیاری] │ └─── فیلتر سریع بر اساس وضعیت: waiting_for_payment | reserved | checked_in | waiting | in_progress | visited | completed | cancelled_* | no_show ``` **وضعیت‌های نوبت با رنگ‌بندی:** | وضعیت | رنگ | |--------|------| | waiting_for_payment | زرد | | reserved | آبی | | checked_in | بنفش | | waiting | نارنجی | | in_progress | آبی تیره | | visited / completed | سبز | | cancelled_* / no_show | قرمز | | auto_cancel_unpaid | خاکستری | **Pages:** `/admin/appointments`, `/admin/appointments/:uuid` --- ## 7. مدیریت پرداخت‌ها (Payment Management) ``` [لیست پرداخت‌ها] ├─► فیلتر: تاریخ / وضعیت / درگاه (mellat/sep) ├─► جستجو: شماره مرجع / موبایل │ ├─── ردیف پرداخت ──► │ └─ مشاهده جزئیات ──► [صفحه پرداخت] │ ├─ شناسه پرداخت، مبلغ، درگاه │ ├─ وضعیت: pending/received/canceled/refund │ ├─ زمان پرداخت │ ├─ لینک به نوبت مرتبط │ └─ دکمه «استرداد» (اگر وضعیت received) │ └─── آمار خلاصه بالای صفحه: ├─ مجموع پرداخت‌های موفق امروز ├─ مجموع مبلغ امروز └─ تعداد پرداخت‌های در انتظار ``` **Pages:** `/admin/payments`, `/admin/payments/:uuid` --- ## 8. مدیریت تسویه‌حساب (Settlement Management) ``` [لیست درخواست‌های تسویه] ├─► فیلتر: وضعیت (pending/approved/rejected) / نماینده │ ├─── ردیف تسویه ──► │ └─ مشاهده ──► [صفحه تسویه] │ ├─ نام نماینده + موجودی کیف‌پول │ ├─ مبلغ درخواست‌شده │ ├─ اطلاعات حساب بانکی (شماره کارت، بانک) │ ├─ تاریخ درخواست │ └─ اقدامات: │ ├─ تأیید ──► PATCH approve │ └─ رد کردن ──► [فرم دلیل رد] ──► PATCH reject │ └─── آمار: مجموع در انتظار / تأییدشده این ماه ``` **Pages:** `/admin/settlements`, `/admin/settlements/:uuid` --- ## 9. مدیریت نمایندگان (Representation Management) ``` [لیست نمایندگان] │ ├─── ردیف نماینده ──► │ └─ مشاهده ──► [صفحه نماینده] │ ├─ اطلاعات دامنه، شهر، درصد کمیسیون │ ├─ حساب‌های بانکی (لیست + افزودن) │ ├─ کیف‌پول: موجودی + تاریخچه تراکنش‌ها │ ├─ آمار ماهانه (نمودار Jalali) │ └─ آمار سالانه درآمد │ └─── دکمه «افزودن نماینده» ──► [فرم] ├─ نام دامنه ├─ شهر ├─ درصد کمیسیون └─ حساب بانکی پیش‌فرض ``` **Pages:** `/admin/representations`, `/admin/representations/:uuid` --- ## 10. مدیریت نظرات (Comment Moderation) ``` [صف تأیید نظرات] ├─► فیلتر: تأییدنشده / تأییدشده / همه ├─► جستجو: نام پزشک / متن │ ├─── ردیف نظر ──► │ ├─ نام کاربر، نام پزشک، تاریخ │ ├─ عنوان و متن نظر │ ├─ تأیید ──► PATCH approve │ └─ رد / حذف ──► [Confirm Dialog] │ └─── آمار: تعداد در انتظار تأیید (badge در منو) ``` **Pages:** `/admin/comments` --- ## 11. مدیریت امتیازدهی (Rating Management) ``` [لیست امتیازها] ├─► فیلتر: پزشک / بازه زمانی │ ├─── ردیف امتیاز ──► │ ├─ نام بیمار، نام پزشک، تاریخ │ ├─ 5 شاخص (صحت تشخیص، مهارت، رفتار، نظافت، زمان انتظار) │ ├─ ستاره کلی │ └─ حذف ──► [Confirm Dialog] │ └─── نمودار میانگین امتیازها به تفکیک پزشک ``` **Pages:** `/admin/ratings` --- ## 12. مدیریت پیامک (SMS Management) ``` [پنل SMS] ├─► تب «قالب‌های نمونه» (قالب‌های ادمین) │ ├─ لیست قالب‌های sample │ ├─ افزودن قالب نمونه ──► [فرم] │ └─ ویرایش / حذف │ ├─► تب «در انتظار تأیید» │ ├─ لیست قالب‌های submitted توسط پزشکان/کلینیک‌ها │ ├─── ردیف قالب ──► │ │ ├─ نام، دسته‌بندی، محتوا، ارسال‌کننده │ │ ├─ تأیید ──► PATCH approve │ │ └─ رد ──► [فرم دلیل رد] ──► PATCH reject │ └─► تب «لاگ‌های ارسال» ├─ فیلتر: وضعیت (queued/sent/failed) / provider / تاریخ └─ مشاهده جزئیات هر پیام ``` **Pages:** `/admin/sms` **API:** - `GET /api/v1/sms/sample-templates` - `PATCH /api/v1/sms/templates/:uuid/approve` - `PATCH /api/v1/sms/templates/:uuid/reject` --- ## 13. مدیریت دسته‌بندی‌ها (Categories) ``` [صفحه دسته‌بندی‌ها] ├─► تب‌بندی بر اساس نوع: │ ├─ استان‌ها (state) │ ├─ شهرها (city) ──► وابسته به استان انتخابی │ ├─ تخصص‌ها (specialty) │ ├─ خدمات پزشک (doctor_service) │ ├─ نوع بیمه (insurance_type) │ ├─ بیمه تکمیلی (supplementary_insurance) │ └─ تگ‌های بلاگ (tag) │ └─── هر تب: ├─ لیست با جستجو ├─ افزودن ──► [فرم: نام، کد، parent (اگر نیاز)] ├─ ویرایش └─ حذف ──► [Confirm Dialog] ``` **Pages:** `/admin/categories` --- ## 14. مدیریت بلاگ (Blog Management) ``` [لیست مقالات] ├─► فیلتر: وضعیت (draft/published) / نویسنده / تگ │ ├─── ردیف مقاله ──► │ ├─ عنوان، نویسنده، تاریخ، تعداد بازدید │ ├─ مشاهده / ویرایش ──► [ادیتور مقاله] │ └─ حذف ──► [Confirm Dialog] │ └─── دکمه «نوشتن مقاله» ──► [ادیتور] ├─ عنوان، خلاصه، محتوا (Rich Text) ├─ آپلود تصویر ├─ انتخاب تگ‌ها └─ انتشار / ذخیره پیش‌نویس ``` **Pages:** `/admin/blogs`, `/admin/blogs/new`, `/admin/blogs/:uuid/edit` --- ## 15. مدیریت منشی‌ها (Secretary Management) ``` [لیست منشی‌ها] (کلی، همه پزشکان) ├─► فیلتر: پزشک / وضعیت فعال │ ├─── ردیف منشی ──► │ ├─ نام، موبایل، نام پزشک │ ├─ مشاهده دسترسی‌ها (JSON permissions) │ ├─ ویرایش دسترسی‌ها ──► [فرم Checkbox‌ها] │ │ appointments: view/create/cancel/update_status │ │ addresses: view/create/update/delete │ │ clinic_info: view/update │ │ insurances: view/create/update/delete │ ├─ فعال/غیرفعال │ └─ حذف ──► [Confirm Dialog] ``` **Pages:** `/admin/secretaries` --- ## 16. ساختار Navigation (Sidebar) ``` Sidebar ├─ 📊 داشبورد ├─ 👥 کاربران ├─ 🩺 پزشکان ├─ 🏥 کلینیک‌ها ├─ 📅 نوبت‌ها ├─ 💳 پرداخت‌ها ├─ 🏦 تسویه‌حساب [badge: pending count] ├─ 🤝 نمایندگان ├─ 💬 نظرات [badge: pending count] ├─ ⭐ امتیازها ├─ 📱 پیامک ├─ 🗂 دسته‌بندی‌ها ├─ 📝 بلاگ └─ 🔐 منشی‌ها ``` --- ## 17. Global Components | Component | توضیح | |-----------|--------| | `` | جدول با sort، filter، pagination | | `` | نمایش وضعیت با رنگ‌بندی | | `` | تأیید عملیات حساس | | `` | جستجوی debounced | | `` | فیلترهای collapsible | | `` | آپلود تصویر با preview | | `` | انتخاب تاریخ شمسی | | `` | نمایش اعداد فارسی | | `` | Toast notifications | | `` | ماتریس دسترسی‌های منشی | --- ## 18. Auth Guard & Route Protection ``` [App Router] ├─ /login ──────────────────► PublicRoute (redirect to /admin/dashboard if logged in) └─ /admin/* ─────────────────► PrivateRoute ├─ Check JWT validity ├─ Verify ROLE_ADMIN ├─ Auto refresh token if expired └─ Redirect to /login if unauthenticated ``` --- ## 19. State Management پیشنهادی ``` React Query (TanStack Query) ──► همه API calls (cache + refetch) Zustand ──► auth state، sidebar state، notification queue React Hook Form + Zod ──► همه فرم‌ها با validation React Router v6 ──► routing ```