import { useEffect, useState } from 'react'; import { apiAdmin, type EmailDomainItem } from '../api'; export function OrganizationSection() { const [domains, setDomains] = useState([]); const [newDomain, setNewDomain] = useState(''); const [loading, setLoading] = useState(true); const [busy, setBusy] = useState(false); const load = async () => { setLoading(true); try { const res = await apiAdmin.listEmailDomains(); setDomains(res.data); } finally { setLoading(false); } }; useEffect(() => { load().catch(console.error); }, []); const addDomain = async () => { if (!newDomain.trim()) return; setBusy(true); try { await apiAdmin.addEmailDomain(newDomain.trim()); setNewDomain(''); await load(); } catch (e: any) { alert(e?.message || 'Không thêm được'); } finally { setBusy(false); } }; const removeDomain = async (id: number) => { if (!confirm('Xóa đuôi email này?')) return; try { await apiAdmin.deleteEmailDomain(id); await load(); } catch (e: any) { alert(e?.message || 'Không xóa được'); } }; return (

Đuôi email được phép

Giới hạn tài khoản giáo viên / nhân sự theo tổ chức. Chưa cấu hình = chấp nhận mọi đuôi email.

{domains.length} đuôi
setNewDomain(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && addDomain()} />
{loading ? (
Đang tải...
) : domains.length === 0 ? (
Chưa giới hạn đuôi email — mọi địa chỉ đều có thể đăng ký.
) : (
    {domains.map((d) => (
  • @{d.domain}
  • ))}
)}

Gợi ý

  • Thêm từng đuôi email thuộc tổ chức (vd: rikkei.edu.vn)
  • Sinh viên đăng nhập client không bị ảnh hưởng bởi cấu hình này
  • Chỉ áp dụng cho tài khoản quản lý trên portal này
); }