87 lines
3.5 KiB
Markdown
87 lines
3.5 KiB
Markdown
# جریان کاربری — تسک ۱۰: مدیریت پرسنل (Staff)
|
|
|
|
## جریان ایجاد پرسنل جدید
|
|
|
|
```
|
|
مدیر کلینیک/دکتر وارد پنل میشود
|
|
│
|
|
▼
|
|
GET /api/v1/staff
|
|
→ لیست پرسنل فعلی context جاری نمایش داده میشود
|
|
│
|
|
▼
|
|
کاربر روی «افزودن پرسنل» کلیک میکند → Modal باز میشود
|
|
│
|
|
▼
|
|
POST /api/v1/staff
|
|
{ full_name, phone?, job_title?, address?, national_code? }
|
|
│
|
|
├─► 422: full_name خالی است → نمایش خطا در فرم
|
|
│
|
|
└─► 201: پرسنل ایجاد شد → لیست refresh میشود
|
|
```
|
|
|
|
## جریان ویرایش پرسنل
|
|
|
|
```
|
|
کاربر روی آیکن ویرایش در جدول کلیک میکند
|
|
│
|
|
▼
|
|
Modal با اطلاعات فعلی پر میشود
|
|
│
|
|
▼
|
|
PATCH /api/v1/staff/{uuid}
|
|
{ full_name, phone, job_title, ... }
|
|
│
|
|
├─► 403: این پرسنل متعلق به شما نیست
|
|
└─► 200: ویرایش موفق → Modal بسته میشود
|
|
```
|
|
|
|
## جریان غیرفعالسازی (Soft Delete)
|
|
|
|
```
|
|
کاربر روی toggle در جدول کلیک میکند
|
|
│
|
|
▼
|
|
PATCH /api/v1/staff/{uuid}/toggle
|
|
│
|
|
▼
|
|
active: true → false یا false → true
|
|
│
|
|
▼
|
|
در لیست: badge وضعیت تغییر میکند (فعال/غیرفعال)
|
|
```
|
|
|
|
## چرا حذف سخت ممنوع است
|
|
|
|
```
|
|
clinic_staff (active=false)
|
|
│
|
|
├── service_items.staff_id → هنوز به پرسنل ارجاع دارد
|
|
│ (تاریخچه سرویسها حفظ میشود)
|
|
│
|
|
└── session_services.staff_id → سشنهای قبلی بیمار
|
|
نام انجامدهنده را نشان میدهند
|
|
```
|
|
|
|
اگر پرسنل حذف سخت میشد:
|
|
- `service_items.staff_id` → NULL (انجامدهنده سرویس گم میشد)
|
|
- `session_services.staff_id` → NULL (تاریخچه ویزیت ناقص میشد)
|
|
|
|
## نمایش در Frontend (StaffPage.tsx)
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ پرسنل کلینیک [+ افزودن] │
|
|
├──────────┬──────────┬──────────┬────────────────┤
|
|
│ نام │ سمت │ تلفن │ وضعیت عملیات│
|
|
├──────────┼──────────┼──────────┼────────────────┤
|
|
│ علی رضایی│ پرستار │ 0912... │ ✅فعال ✏️ 🔘 │
|
|
│ مریم نوری│ منشی │ 0913... │ ❌غیرفعال✏️ 🔘│
|
|
└──────────┴──────────┴──────────┴────────────────┘
|
|
```
|
|
|
|
- ستون آخر: آیکن ویرایش (Modal) + toggle وضعیت
|
|
- غیرفعالها با رنگ کمتر نمایش داده میشوند اما از لیست حذف نمیشوند
|
|
- فیلتر: «فقط فعالها» / «همه» — query param `?active=1`
|