/** * ════════════════════════════════════════════════════════════ * مُصادَق (Musadaq) — Staff Management Page (Premium Dark) * ════════════════════════════════════════════════════════════ */ import { useState, useEffect } from 'react'; import { Users, UserPlus, Search, Shield, Mail, Phone, MoreVertical, Trash2, Loader2, X } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; import apiClient from '../../api/client'; export const StaffPage = () => { const [staff, setStaff] = useState([]); const [isLoading, setIsLoading] = useState(true); const [searchTerm, setSearchTerm] = useState(''); const [isAddModalOpen, setIsAddModalOpen] = useState(false); // Form State const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [role, setRole] = useState('manager'); const [isSubmitting, setIsSubmitting] = useState(false); const fetchStaff = async () => { try { const { data } = await apiClient.get('/staff'); setStaff(data); } catch (error) { console.error('Failed to fetch staff', error); } finally { setIsLoading(false); } }; useEffect(() => { fetchStaff(); }, []); const handleCreateStaff = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); try { await apiClient.post('/staff', { name, email, password, role }); setIsAddModalOpen(false); setName(''); setEmail(''); setPassword(''); fetchStaff(); } catch (error) { console.error('Failed to create staff', error); alert('حدث خطأ أثناء إضافة الموظف'); } finally { setIsSubmitting(false); } }; const handleDelete = async (id: string) => { if (!confirm('هل أنت متأكد من حذف هذا الموظف؟')) return; try { await apiClient.post(`/staff/${id}/delete`); fetchStaff(); } catch (error) { alert('فشل حذف الموظف'); } }; const filteredStaff = staff.filter(s => s.name.toLowerCase().includes(searchTerm.toLowerCase()) || s.email.toLowerCase().includes(searchTerm.toLowerCase()) ); return (

إدارة الموظفين

إدارة فريق العمل المالي لمكتب المحاسبة الخاص بك.

{/* ── Search Bar ──────────────────────────────── */}
setSearchTerm(e.target.value)} />
{/* ── Staff List ───────────────────────────────────── */}
{isLoading ? (

جاري جلب بيانات الفريق...

) : filteredStaff.length === 0 ? (

لا يوجد موظفون مضافون

يمكنك إضافة موظفين لمساعدتك في إدارة ومعالجة فواتير الشركات.

) : (
{filteredStaff.map((s, idx) => ( ))}
الاسم الكامل البريد الإلكتروني الدور الوظيفي إجراءات
{s.name[0]}
{s.name}
{s.email}
{s.role === 'admin' ? 'مدير نظام' : 'محاسب'}
)}
{/* ── Add Staff Modal ─────────────────────────────────── */} {isAddModalOpen && (

إضافة موظف جديد

setName(e.target.value)} className="w-full bg-slate-800 border border-slate-700 rounded-xl px-4 py-3 outline-none focus:border-emerald-500/50 transition-all text-white placeholder-slate-600" placeholder="مثال: أحمد محمد" />
setEmail(e.target.value)} className="w-full bg-slate-800 border border-slate-700 rounded-xl px-4 py-3 outline-none focus:border-emerald-500/50 transition-all text-white placeholder-slate-600" placeholder="ahmed@office.com" />
setPassword(e.target.value)} className="w-full bg-slate-800 border border-slate-700 rounded-xl px-4 py-3 outline-none focus:border-emerald-500/50 transition-all text-white placeholder-slate-600" placeholder="••••••••" />
)}
); };