import { useEffect, useState } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { Link, useParams } from 'react-router'; import { ChevronRightIcon } from '@heroicons/react/24/outline'; import { toast } from 'sonner'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; import type { Secretary } from '../types'; import { digitsOnly, formatDate, formatNumber, formatRial } from '../lib/utils'; import PageHeader from '../components/ui/PageHeader'; import Switch from '../components/ui/Switch'; /** یک ردیف label:value با همان تم کارت‌های موجود. */ function Row({ label, value }: { label: string; value: React.ReactNode }) { return (
{label} {value}
); } /** * جزئیات یک رابطهٔ منشی–پزشک/کلینیک برای ادمین: مشخصات، سهم درآمد نوبت‌های آنلاین * (فعال‌سازی + درصد) و خلاصهٔ درآمد. */ export default function SecretaryDetailPage() { const { uuid = '' } = useParams(); const qc = useQueryClient(); const [enabled, setEnabled] = useState(false); const [percent, setPercent] = useState('0'); const { data, isLoading } = useQuery>({ queryKey: ['admin-secretary', uuid], queryFn: () => api.get(`/api/v1/admin/secretary/${uuid}`), enabled: !!uuid, }); const secretary = data?.data?.data; useEffect(() => { if (!secretary) return; setEnabled(!!secretary.online_share_enabled); setPercent(String(secretary.online_share_percent ?? 0)); }, [data]); const save = useMutation({ mutationFn: () => api.put(`/api/v1/admin/secretary/${uuid}/online-share`, { enabled, percent: Number(percent) || 0, }), onSuccess: () => { toast.success('سهم درآمد منشی ذخیره شد'); qc.invalidateQueries({ queryKey: ['admin-secretary', uuid] }); qc.invalidateQueries({ queryKey: ['secretaries'] }); }, onError: (e: Error) => toast.error(e.message), }); const invalidPercent = Number(percent) > 100 || (enabled && Number(percent) <= 0); if (isLoading || !secretary) { return
در حال بارگذاری...
; } return (
بازگشت

اطلاعات منشی

{secretary.mobile_number}} /> {secretary.clinic_name && } {secretary.is_active ? 'فعال' : 'غیرفعال'} } />

سهم درآمد نوبت‌های آنلاین

درصد سهم از مبلغ خالص نوبت محاسبه می‌شود: ابتدا هزینهٔ پیامک و مالیات و کسورات از مبلغ نوبت کم می‌شود، سپس این درصد اعمال می‌گردد. فقط نوبت‌هایی که آنلاین ثبت و پرداخت می‌شوند سهم می‌سازند.

setPercent(digitsOnly(e.target.value, 3))} placeholder="مثلاً: ۵" /> {Number(percent) > 100 &&

درصد نمی‌تواند بیشتر از ۱۰۰ باشد

} {enabled && Number(percent) <= 0 &&

برای فعال‌سازی، درصد باید بیشتر از صفر باشد

}

خلاصه درآمد

); }