feat(web): 감사 로그·발송 내역 관리 화면 추가

- AuditLogPage(/audit): 최근 관리 행위(승인/반려·블랙리스트) 조회.
- DeliveryOutboxPage(/deliveries): 출입증 발송 내역 조회(성공/실패/전체 필터) + 실패건 수동 재발송.
- api.ts/types에 listAudit·listDeliveries·retryDelivery + AuditLog·PassDelivery 타입 추가.
- Layout 네비(ADMIN)와 App 라우팅(ADMIN 가드) 연결, common.css에 row-gap·cell-error 유틸 추가.

검증: tsc+vite 빌드 통과. 런타임 승인 후 GET /api/admin/audit·/deliveries 응답이 타입과 일치 확인.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
unknown
2026-07-03 16:03:51 +09:00
parent f7aaeaba2a
commit 17d6036bca
7 changed files with 222 additions and 0 deletions

View File

@@ -2,13 +2,16 @@ import {
AccessAction,
AccessRecord,
ApiResponse,
AuditLog,
BlacklistCreate,
BlacklistItem,
ChangePasswordRequest,
CurrentUser,
DeliveryStatus,
ExcelImportResult,
InsideVisitor,
LoginRequest,
PassDelivery,
StatsSummary,
PublicPass,
VisitRequestCreate,
@@ -153,3 +156,12 @@ export const deleteBlacklist = (id: number) =>
// ===== Reports =====
export const reportDownloadUrl = (from: string, to: string) =>
`/api/reports/visits.xlsx?from=${from}&to=${to}`;
// ===== Audit log (ADMIN) =====
export const listAudit = () => request<AuditLog[]>('/admin/audit');
// ===== Pass delivery outbox (ADMIN) =====
export const listDeliveries = (status?: DeliveryStatus) =>
request<PassDelivery[]>(`/admin/deliveries${status ? `?status=${status}` : ''}`);
export const retryDelivery = (id: number) =>
request<PassDelivery>(`/admin/deliveries/${id}/retry`, { method: 'POST' });