// static/js/admin.Panel.jsx function AdminPanel() { const { token } = useContext(AuthContext); const [tab, setTab] = useState("employees"); return (
{tab === "employees" && } {tab === "tests" && } {tab === "analytics" && } {tab === "company" && }
); } function AdminOrganization({ token }) { const [org, setOrg] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(""); const [success, setSuccess] = useState(""); useEffect(() => { let isMounted = true; async function loadOrganization() { try { setLoading(true); setError(""); setSuccess(""); const data = await API.getOrganization(token); if (isMounted) { setOrg(data); } } catch (e) { if (isMounted) { setError(e.message || "Не удалось загрузить профиль компании"); } } finally { if (isMounted) { setLoading(false); } } } if (token) { loadOrganization(); } else { setLoading(false); } return () => { isMounted = false; }; }, [token]); if (loading) return
Загрузка профиля компании...
; if (!org) return (
Не удалось получить данные компании.
); const handleChange = (field, value) => { setOrg((prev) => ({ ...prev, [field]: value, })); }; const handleSave = async () => { try { setSaving(true); setError(""); setSuccess(""); const updated = await API.updateOrganization(token, { name: org.name, description: org.description, contact_email: org.contact_email, contact_phone: org.contact_phone, website: org.website, logo_url: org.logo_url, }); setOrg(updated); setSuccess("Изменения успешно сохранены"); } catch (e) { setError(e.message || "Ошибка сохранения профиля компании"); } finally { setSaving(false); } }; const handleRegenerateInvite = async () => { const confirmResult = window.confirm( "Сгенерировать новый инвайт-код?\nСтарый код перестанет работать." ); if (!confirmResult) return; try { setSaving(true); setError(""); setSuccess(""); const updated = await API.regenerateInviteCode(token); setOrg(updated); setSuccess("Новый инвайт-код сгенерирован"); } catch (e) { setError(e.message || "Ошибка генерации инвайт-кода"); } finally { setSaving(false); } }; const handleCopyInvite = () => { if (!org.invite_code) return; navigator.clipboard .writeText(org.invite_code) .then(() => setSuccess("Инвайт-код скопирован")) .catch(() => setError("Не удалось скопировать инвайт-код")); }; return (

Профиль компании

{error && (
{error}
)} {success && (
{success}
)}
{/* ID */}
{/* Название */}
handleChange("name", e.target.value)} />
{/* slug */}
{/* Описание */}