diff --git a/assets/admin/pages/ClinicServicesPage.tsx b/assets/admin/pages/ClinicServicesPage.tsx
index 953cdf50..b27d8a46 100644
--- a/assets/admin/pages/ClinicServicesPage.tsx
+++ b/assets/admin/pages/ClinicServicesPage.tsx
@@ -3,6 +3,7 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import {
PlusIcon, PencilIcon, TrashIcon, WrenchScrewdriverIcon, BanknotesIcon,
ShieldCheckIcon, MagnifyingGlassIcon, EyeIcon, EyeSlashIcon,
+ EllipsisHorizontalIcon, CheckCircleIcon, ClockIcon,
} from '@heroicons/react/24/outline';
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
@@ -48,6 +49,24 @@ function Avatar({ name }: { name: string }) {
);
}
+function SrvRow({ label, value, strong, danger }: { label: string; value: string; strong?: boolean; danger?: boolean }) {
+ return (
+
+ {label}:
+
+ {value}
+
+
+ );
+}
+
function ClinicServicesPageInner() {
const qc = useQueryClient();
@@ -60,6 +79,7 @@ function ClinicServicesPageInner() {
const [insuranceItem, setInsuranceItem] = useState(null);
const [search, setSearch] = useState('');
const [showInactive, setShowInactive] = useState(true);
+ const [menuOpen, setMenuOpen] = useState(null);
const { data: sectionsData, isLoading: sectionsLoading } = useQuery>({
queryKey: ['service-sections'],
@@ -313,61 +333,103 @@ function ClinicServicesPageInner() {
)}
) : (
-
- {items.map((item) => (
+
+ {items.map((item) => {
+ const done = item.active;
+ const menuItemStyle: React.CSSProperties = {
+ display: 'flex', alignItems: 'center', gap: 8, width: '100%',
+ padding: '8px 10px', borderRadius: 8, border: 'none', cursor: 'pointer',
+ background: 'transparent', color: 'var(--text-2)', fontSize: 13,
+ fontFamily: 'inherit', textAlign: 'start', whiteSpace: 'nowrap',
+ };
+ return (
-
-
{item.name}
-
- {!item.active &&
غیرفعال}
- {item.insurance_covered && (
-
بیمه
+ {/* ⋮ منوی عملیات — چپبالا (مطابق فیگما) */}
+
+ {menuOpen === item.uuid && (
+ <>
+
setMenuOpen(null)} />
+
+
+
+
+
+
+ >
+ )}
+
+ {/* هدر: آیکن وضعیت (راست) + نام و بخش */}
+
+
+ {done ? : }
+
+
+
{item.name}
+ {selectedSection && (
+
{selectedSection.name}
)}
-
- {item.staff ? (
- <>
-
-
{item.staff.full_name}
- >
- ) : (
-
بدون پرسنل مسئول
- )}
-
+
-
{formatRial(item.price_rials)}
+
+
-
-
-
-
-
-
+
+
+
+ {item.insurance_covered && item.insurance_price_rials != null && (
+
+ )}
+
+
- ))}
+ );
+ })}
)}
>