From 3c731ba5327901e80ea21a8607e425b2fe399a2f Mon Sep 17 00:00:00 2001 From: nns Date: Sun, 7 Jun 2026 19:01:13 +0500 Subject: [PATCH] =?UTF-8?q?fix(s18):=20audit-log=20employee=20filter=20?= =?UTF-8?q?=E2=80=94=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20endpoint=20=D0=B8=20DTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При первом деплое /api/employees вернул 404 — реальный endpoint /api/organization/employees. Также DTO содержит lastName/firstName/ middleName отдельно, не fullName — собираем строку на клиенте. Co-Authored-By: Claude Opus 4.7 --- .../src/pages/OrgAuditLogPage.tsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/food-market.web/src/pages/OrgAuditLogPage.tsx b/src/food-market.web/src/pages/OrgAuditLogPage.tsx index 1a9f9b3..0503352 100644 --- a/src/food-market.web/src/pages/OrgAuditLogPage.tsx +++ b/src/food-market.web/src/pages/OrgAuditLogPage.tsx @@ -38,7 +38,12 @@ const ENTITY_TYPES = [ /** Журнал мутаций tenant'а — кто, что и когда менял. Read-only. * Запись делает OrgAuditInterceptor автоматически на каждом SaveChanges. */ -interface EmployeeOption { userId: string | null; fullName: string } +interface EmployeeOption { + userId: string | null + lastName: string + firstName: string + middleName: string | null +} export function OrgAuditLogPage() { const [page, setPage] = useState(1) @@ -51,12 +56,21 @@ export function OrgAuditLogPage() { // Список сотрудников для фильтра «Кто». Та же permission что и audit-log, // подгружается раз на сессию (staleTime). Кешируется в TanStack Query. + // Endpoint реальный — /api/organization/employees (не /api/employees). const employees = useQuery({ - queryKey: ['/api/employees', 'audit-log-filter'], - queryFn: async () => (await api.get<{ items: EmployeeOption[] }>('/api/employees?pageSize=200')).data, + queryKey: ['/api/organization/employees', 'audit-log-filter'], + queryFn: async () => (await api.get<{ items: EmployeeOption[] }>('/api/organization/employees?pageSize=200&status=all')).data, staleTime: 5 * 60 * 1000, }) + const employeeOptions = (employees.data?.items ?? []) + .filter((u) => !!u.userId) + .map((u) => ({ + userId: u.userId!, + fullName: [u.lastName, u.firstName, u.middleName].filter(Boolean).join(' ').trim(), + })) + .sort((a, b) => a.fullName.localeCompare(b.fullName, 'ru')) + const params = new URLSearchParams({ page: String(page), pageSize: '50' }) if (entityType) params.set('entityType', entityType) if (action) params.set('action', action) @@ -113,9 +127,9 @@ export function OrgAuditLogPage() {