diff --git a/assets/admin/components/layout/PurchaseSubscriptionSidebar.tsx b/assets/admin/components/layout/PurchaseSubscriptionSidebar.tsx
index 7539c671..a3dd8385 100644
--- a/assets/admin/components/layout/PurchaseSubscriptionSidebar.tsx
+++ b/assets/admin/components/layout/PurchaseSubscriptionSidebar.tsx
@@ -19,7 +19,6 @@ const NAV_ITEMS: NavItem[] = [
{ key: 'payment', label: 'مدیریت پرداخت', to: '/admin/my-financial' },
{ key: 'appointment', label: 'مدیریت نوبت دهی', to: '/admin/appointment-settings' },
{ key: 'insurance', label: 'مدیریت بیمه', to: '/admin/insurance-pricing' },
- { key: 'services', label: 'خدمات', to: '/admin/clinic-services' },
{ key: 'tags', label: 'تگ ها', to: '/admin/tags-settings' },
{ key: 'sms', label: 'پیامک ها', to: '/admin/sms-wallet' },
{ key: 'clinic', label: 'مدیریت مطب', to: '/admin/my-clinic' },
diff --git a/assets/admin/components/layout/SettingsLayout.tsx b/assets/admin/components/layout/SettingsLayout.tsx
index 8e2084fe..99b11f38 100644
--- a/assets/admin/components/layout/SettingsLayout.tsx
+++ b/assets/admin/components/layout/SettingsLayout.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import {
CreditCardIcon, UserIcon, CalendarDaysIcon, BuildingOffice2Icon,
- WrenchScrewdriverIcon, BanknotesIcon, UsersIcon, ShieldCheckIcon,
+ BanknotesIcon, UsersIcon, ShieldCheckIcon,
TagIcon, ChatBubbleLeftRightIcon, UserCircleIcon, UserPlusIcon,
} from '@heroicons/react/24/outline';
import PurchaseSubscriptionSidebar from './PurchaseSubscriptionSidebar';
@@ -24,7 +24,6 @@ export const SETTINGS_MENU: SettingsMenuItem[] = [
{ key: 'doctor', label: 'مدیریت پزشک', icon: UserIcon, to: '/admin/profile', roles: ['doctor'] },
{ key: 'appointment', label: 'مدیریت نوبت دهی', icon: CalendarDaysIcon, to: '/admin/appointment-settings', roles: ['doctor'] },
{ key: 'clinic', label: 'مدیریت مطب', icon: BuildingOffice2Icon, to: '/admin/my-clinic', roles: ['clinic'] },
- { key: 'services', label: 'خدمات', icon: WrenchScrewdriverIcon, to: '/admin/clinic-services' },
{ key: 'payment', label: 'مدیریت پرداخت', icon: BanknotesIcon, to: '/admin/my-financial' },
{ key: 'secretary', label: 'مدیریت منشی', icon: UsersIcon, to: '/admin/my-secretaries' },
{ key: 'staff', label: 'پرسنل', icon: UserPlusIcon, to: '/admin/staff' },
diff --git a/assets/admin/components/layout/Sidebar.test.tsx b/assets/admin/components/layout/Sidebar.test.tsx
index a6734add..97fec4f4 100644
--- a/assets/admin/components/layout/Sidebar.test.tsx
+++ b/assets/admin/components/layout/Sidebar.test.tsx
@@ -41,3 +41,23 @@ describe('Sidebar — expandable نوبتها menu', () => {
expect(screen.getByText('نوبت های تایید شده')).toBeInTheDocument();
});
});
+
+describe('Sidebar — خدمات در منوی اصلی (نه تنظیمات)', () => {
+ it('shows خدمات in the clinic main menu linking to /admin/clinic-services', () => {
+ useAuthStore.setState({
+ primaryRole: 'clinic', dbUuid: 'c1', userName: 'کلینیک',
+ availableContexts: [], context: null,
+ } as any);
+ renderWithProviders(, { route: '/admin/dashboard' });
+ expect(screen.getByText('سرویس ها').closest('a')).toHaveAttribute('href', '/admin/clinic-services');
+ });
+
+ it('shows خدمات in the doctor main menu linking to /admin/clinic-services', () => {
+ useAuthStore.setState({
+ primaryRole: 'doctor', dbUuid: null, userName: 'پزشک',
+ availableContexts: [], context: null,
+ } as any);
+ renderWithProviders(, { route: '/admin/dashboard' });
+ expect(screen.getByText('سرویس ها').closest('a')).toHaveAttribute('href', '/admin/clinic-services');
+ });
+});
diff --git a/assets/admin/components/layout/Sidebar.tsx b/assets/admin/components/layout/Sidebar.tsx
index 76b3e9a5..fbadb887 100644
--- a/assets/admin/components/layout/Sidebar.tsx
+++ b/assets/admin/components/layout/Sidebar.tsx
@@ -22,6 +22,7 @@ import {
StarIcon,
TagIcon,
UserCircleIcon,
+ WrenchScrewdriverIcon,
UserGroupIcon,
UsersIcon,
} from "@heroicons/react/24/outline";
@@ -242,10 +243,15 @@ function buildSections(
icon: ArchiveBoxIcon,
label: "انبارداری",
},
+ {
+ to: "/admin/clinic-services",
+ icon: WrenchScrewdriverIcon,
+ label: "سرویس ها",
+ },
],
},
{
- // مدیریت بیمه / سرویسها / کیف پول پیامک زیر همین «تنظیمات» است
+ // مدیریت بیمه / کیف پول پیامک زیر همین «تنظیمات» است
// (منوی داخل صفحهٔ اشتراک)، نه در سایدبار اصلی.
label: "تنظیمات",
items: [
@@ -312,10 +318,15 @@ function buildSections(
icon: ArchiveBoxIcon,
label: "انبارداری",
},
+ {
+ to: "/admin/clinic-services",
+ icon: WrenchScrewdriverIcon,
+ label: "سرویس ها",
+ },
],
},
{
- // مدیریت بیمه / سرویسها / کیف پول پیامک زیر همین «تنظیمات» است
+ // مدیریت بیمه / کیف پول پیامک زیر همین «تنظیمات» است
// (منوی داخل صفحهٔ اشتراک)، نه در سایدبار اصلی.
label: "تنظیمات",
items: [
diff --git a/assets/admin/pages/ClinicServicesPage.tsx b/assets/admin/pages/ClinicServicesPage.tsx
index 61c6e13a..b21c3863 100644
--- a/assets/admin/pages/ClinicServicesPage.tsx
+++ b/assets/admin/pages/ClinicServicesPage.tsx
@@ -6,7 +6,6 @@ import {
EllipsisHorizontalIcon, CheckCircleIcon, XCircleIcon, ChevronRightIcon,
XMarkIcon, UsersIcon, ClockIcon,
} from '@heroicons/react/24/outline';
-import SettingsLayout from '../components/layout/SettingsLayout';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { z } from 'zod';
@@ -611,10 +610,8 @@ function ClinicServicesPageInner() {
export default function ClinicServicesPage() {
return (
-
-
-
-
-
+
+
+
);
}