feat(secretary): enhance functionality for secretary role in appointments management
This commit is contained in:
@@ -495,9 +495,11 @@ export default function AppointmentsPage() {
|
||||
const isClinic = primaryRole === 'clinic';
|
||||
const isDoctor = primaryRole === 'doctor';
|
||||
const isRepresentation = primaryRole === 'representation';
|
||||
// منشیِ محیطِ کلینیک باید مثل کلینیک چندپزشکه رفتار کند: تب پزشکان + تایملاین.
|
||||
// dbUuid در این محیط uuid کلینیک است (نه پزشک) — همان مبنای clinic/doctor-list.
|
||||
const isClinicScopedSecretary = primaryRole === 'secretary' && scope === 'clinic';
|
||||
// منشی در هر دو ساختار باید تایملاین ببیند: کلینیک چندپزشکه (تب پزشکانِ
|
||||
// تخصیصیافته) و پزشک مستقل (همان یک پزشک). لیست در هر دو حالت از اندپوینتِ
|
||||
// احرازشدهٔ /my/clinic-doctors میآید که خودش هر دو سناریو را resolve میکند.
|
||||
const isSecretary = primaryRole === 'secretary';
|
||||
const isClinicScopedSecretary = isSecretary && scope === 'clinic';
|
||||
// مجوزهای منشی روی نوبتها؛ برای owner/پزشک همیشه true.
|
||||
const { can } = usePermissions();
|
||||
const canCreateAppt = can('appointments', 'create');
|
||||
@@ -552,15 +554,15 @@ export default function AppointmentsPage() {
|
||||
|
||||
// ── Clinic doctors (authoritative list for tabs)
|
||||
const clinicDoctorsQuery = useQuery<ApiResponse<{ data: { uuid: string; name: string }[] }>>({
|
||||
queryKey: ['clinic-doctors', dbUuid, isClinicScopedSecretary],
|
||||
// منشی از اندپوینتِ احرازشده میگیرد تا فقط پزشکانِ تخصیصیافتهاش بیایند؛
|
||||
// کلینیک/ادمین از لیستِ کاملِ عمومیِ کلینیک.
|
||||
queryKey: ['clinic-doctors', dbUuid, isSecretary],
|
||||
// منشی از اندپوینتِ احرازشده میگیرد تا فقط پزشکانِ تخصیصیافتهاش بیایند —
|
||||
// چه کلینیک چندپزشکه و چه پزشک مستقل؛ کلینیک/ادمین از لیستِ عمومیِ کلینیک.
|
||||
queryFn: () => api.get(
|
||||
isClinicScopedSecretary
|
||||
isSecretary
|
||||
? '/api/v1/my/clinic-doctors'
|
||||
: `/api/v1/clinic/doctor-list/${dbUuid}`,
|
||||
),
|
||||
enabled: (isClinic || isClinicScopedSecretary) && !!dbUuid,
|
||||
enabled: isSecretary || (isClinic && !!dbUuid),
|
||||
});
|
||||
const clinicDoctorsList = clinicDoctorsQuery.data?.data?.data ?? [];
|
||||
|
||||
@@ -586,16 +588,17 @@ export default function AppointmentsPage() {
|
||||
|
||||
// نوع پروفایل: کلینیک چندپزشکه (تب دکترها + مدیریت چند پزشک) در برابر پزشک مستقل.
|
||||
// نقش clinic/admin = چندپزشکه؛ نقش doctor (حتی مهمانِ کلینیک) = مستقل، فقط برنامهٔ خودش.
|
||||
const isMultiDoctorClinic = isClinic || isAdmin || isClinicScopedSecretary;
|
||||
const isMultiDoctorClinic = isClinic || isAdmin || isSecretary;
|
||||
const showDoctorTabs = isMultiDoctorClinic && doctors.length >= 1;
|
||||
const showDoctorCol = isAdmin && !selectedDoctorUuid;
|
||||
|
||||
// در کلینیک، اولین دکتر بهصورت پیشفرض انتخاب میشود تا زمانبندی مثل طرح پر باشد.
|
||||
// کلینیک و منشی: اولین پزشکِ در دسترس پیشفرض انتخاب میشود تا تایملاین خالی نماند.
|
||||
// برای منشیِ پزشک مستقل این تنها راه انتخاب است (تبِ پزشک هم یک گزینه بیشتر ندارد).
|
||||
useEffect(() => {
|
||||
if ((isClinic || isClinicScopedSecretary) && !selectedDoctorUuid && doctors.length > 0) {
|
||||
if ((isClinic || isSecretary) && !selectedDoctorUuid && doctors.length > 0) {
|
||||
setSelectedDoctorUuid(doctors[0].uuid);
|
||||
}
|
||||
}, [isClinic, isClinicScopedSecretary, selectedDoctorUuid, doctors]);
|
||||
}, [isClinic, isSecretary, selectedDoctorUuid, doctors]);
|
||||
|
||||
// ── محل نوبتدهی برای ادمین
|
||||
// ادمین context کلینیکی ندارد (useClinicContext → null)؛ بدون clinic_uuid فقط برنامهٔ
|
||||
|
||||
Reference in New Issue
Block a user