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 && ( + + )} + +
- ))} + ); + })}
)}