import React, { useEffect, useState } from 'react'; import { listAudit } from '../api'; import { AuditLog } from '../types'; import { formatDateTime } from '../status'; const ACTION_LABEL: Record = { APPROVE: '승인', REJECT: '반려', DELETE: '삭제', BLACKLIST_ADD: '블랙리스트 등록', BLACKLIST_REMOVE: '블랙리스트 해제', ADMIN_CONFIG_UPDATE: '시스템 설정', }; const ACTION_CLASS: Record = { APPROVE: 'green', REJECT: 'red', DELETE: 'red', BLACKLIST_ADD: 'red', BLACKLIST_REMOVE: 'gray', ADMIN_CONFIG_UPDATE: 'blue', }; export const AuditLogPage: React.FC = () => { const [items, setItems] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const load = () => { setLoading(true); listAudit() .then(setItems) .catch((e) => setError(e instanceof Error ? e.message : '조회 실패')) .finally(() => setLoading(false)); }; useEffect(load, []); return (

감사 로그

{error &&
{error}
}

최근 관리 행위 ({items.length})

{items.length === 0 ? (

{loading ? '불러오는 중…' : '기록이 없습니다.'}

) : ( {items.map((a) => ( ))}
시각수행자행위대상상세
{formatDateTime(a.at)} {a.actorUsername || '시스템'} {ACTION_LABEL[a.action] ?? a.action} {a.targetType ? `${a.targetType}${a.targetId != null ? ` #${a.targetId}` : ''}` : '-'} {a.detail || '-'}
)}
); };